背景
今天将线下好不容易写完的
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又爱又恨!!!
作者:moTzxx
链接:https://www.jianshu.com/p/8d282cdc2e1e
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦