ThinkPHP5.1 配置Nginx/Apache下的 URL
2018-11-13 本文已影响36人
泥豆芽儿MT
☪ 背景
- 今天将线下好不容易写完的
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
> 测试环境: phpStudy2016 Apache/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 -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
❉❉ Nginx
- 请找到线上服务环境的
nginx.conf
配置文件,在对应的location/{}
中补充如下代码:
if (!-e $request_filename){
rewrite ^/youdomain/(.*)$ /youdomain/index.php?s=/$1 last;
}
- 因为
ThinkPHP5.1
框架的设计需求,我们的入口路径是在public
下,参考文档时,注意是对应着 二级目录
为了本地环境测试的真实性,我都会习惯性对自己的项目进行虚拟域名的配置,可做参考:
☪ 附录
- 以上操作,希望你也能顺利完成
- 附录文章1:centOS7 安装配置 lnmp参考博客整理
- 附录文章2:WDCP 初次见面/打个招呼
小插曲 【其实,这个项目真实的情况就是从零配置的】
首先
从昨天申请完阿里云主机服务后,整个 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又爱又恨!!!