ThinkPHP5.1 配置Nginx/Apache下的 URL重写
2022-07-28 14:14:58
206
{{single.collect_count}}

☪ 背景

  • 今天将线下好不容易写完的 ThinkPHP 项目代码搬到线上服务器,然后出现各种坑
① 首先出现的情况是,PHP 版本安装太低导致无法解析,需要 >5.6② 当版本满足后,经过一番配置又发现不支持 URL 重写 (形如:"http://seasonpro.com/article/7.html" )③ 分析后发现,本测试用的是Apache服务,线上 CentOS7.1 系统选用的是 Nginx 服务环境
  • 环境
> TP 框架:ThinkPHP5.1.2 版本 > PHP版本:php-5.6.27(>= 及以上)> 服务器 :Nginx> 线上系统:CentOS7.1> 测试环境:phpStudy2016Apache/Nginx
  • 毕竟在这上面花费了太多时间,在此记录一番,愿道友们可做借鉴,最重要的是作为自己备忘记录咯.

☪ 解决方法

1. 环境配置上的注意点

① 首先,安装的 PHP版本不能太低,否则不支持 ThinkPHP5.1 框架的要求② 其次, "3306,80,21,22"等端口需求的开放③ 对于 "php.ini" , "httpd.conf" 等服务配置文件的修改后,一定要重启服务

这里需要注意一点,如果使用的是 阿里云服务 ,一定要在其 安全组配置 中,添加需要的端口,不然仅仅是 Linux 命令操作也是白费

2. 不同应用服务器的区别操作

  • 鄙人觉得,线下测试使用 phpStudy 是挺方便的,可以方便的对开发环境进行切换测试(但是,貌似只适用 windows,不支持MacOS
  • 当然,更加建议:在线下测试不同环境成功后再进行线上配置,避免时间的浪费

此处操作,请参考官方文档:URL访问·ThinkPHP5.1完全开发文档 ,个人梳理测试如下:

❉ apache

  • 此处跟文档介绍稍有一丢丢不同的是,我并未改动 ThinkPHP5.1框架中 public 目录下的 .htaccess 文件

测试发现无影响,其中的源码如下:

<IfModule mod_rewrite.c>Options +FollowSymlinks -MultiviewsRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]</IfModule>

❉❉ Nginx

  • 请找到线上服务环境的 nginx.conf 配置文件,在对应的 location/{} 中补充如下代码:
if (!-e $request_filename){rewrite^/youdomain/(.*)$/youdomain/index.php?s=/$1last;}
  • 因为 ThinkPHP5.1 框架的设计需求,我们的入口路径是在 public下,参考文档时,注意是对应着 二级目录

为了本地环境测试的真实性,我都会习惯性对自己的项目进行虚拟域名的配置,可做参考:
在这里插入图片描述

location / {indexindex.html index.htm index.php;#autoindexon;if (!-e $request_filename){rewrite^(.*)$/index.php?s=/$1last;}}
  • 补充一个超坑的情况 [2018-11-26]

今天我发现,使用 phpStudy 下的 Nginx 做服务器是时,不管怎么配置,都在报 502 bad gateway 错误;
半天无果,一气之下电脑重启,然后,就没问题了!!!
所以,估计有时软件设计存在漏洞,实在无从下手,不如重启试试看!

☪ 附录

小插曲 【其实,这个项目真实的情况就是从零配置的

首先从昨天申请完阿里云主机服务后,整个 CentOS7.1初始化系统一片白纸;然后我参考了之前整理的一篇博客(可见附录),按照操作步骤 “ Nginx->MySQL->PHP7->整合php-fpm ” 一套安装过程走下来最后卡在了URL重写的配置上,因为误删 nginx.conf 文件中的一丢丢内容,怎么也无法还原了一气之下我给初始化了系统,但是也觉得气不过,不愿意再这么安装一遍这时同事建议可以直接安装 WDCP(一套通过WEB控制和管理服务器的 Linux 服务器管理系统以及虚拟主机管理系统)个人百度看着介绍的确简单,主要是可以随意切换PHP版本所以我在系统上直接安装了这个管理系统(简单梳理安装步骤明天我再写篇备忘,可见附录)但是,又TM 但是在提示选择哪种服务环境时,我觉得要不试试 Apache 吧大坑出现了在管理系统页面不管怎么切换PHP版本,生效的都是 PHP5.5.38拜托根本不支持我的 ThinkPHP5.1 框架各种百度,看社区讨论得到的解释竟然是:这种模式下,不支持PHP版本的选择,也不知道官方为啥不来解决这个坑今天一早我重新安装 WDCP,小心的选择了Nginx 服务环境安装选项二十分钟过后一切安装就绪,然后源代码使用FTP工具上传显示服务器对应目录,并按照本地 phpStudy 测试的解决步骤,顺利完工紧接着发现了一个搞笑的问题在默认的 ThinkPHP5.1 框架下的 index目录下的访问一切正常,只是有一个自己新建的模块访问时总是报错 “找不到对应的控制器”原来!原来!Linux对目录、命名空间什么的大小写太过敏感,当然原来的代码在本地 Windows 机器上是没问题的得以后好生注意下吧,两天时间搭了进去,真是对Linux又爱又恨!!!
回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}