ThinkPHP5.1 配置Nginx/Apache下的 URL重写

☪ 背景

  • 今天将线下好不容易写完的 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 文件

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


  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

❉❉ Nginx

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

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


ThinkPHP5.1 配置Nginx/Apache下的 URL重写_第1张图片

☪ 附录

  • 以上操作,希望你也能顺利完成
  • 附录文章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又爱又恨!!!

你可能感兴趣的:(ThinkPHP5.1 配置Nginx/Apache下的 URL重写)