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 文件

測試發現無影響,其中的源碼如下:

<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又愛又恨!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章