ThinkPHP5.1 配置Nginx/Apache下的 URL重寫
阿新 • • 發佈:2018-12-09
☪ 背景
- 今天將線下好不容易寫完的
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
下,參考文件時,注意是對應著 二級目錄
為了本地環境測試的真實性,我都會習慣性對自己的專案進行虛擬域名的配置,可做參考:
- 補充一個超坑的情況
[2018-11-26]
:
今天我發現,使用
phpStudy
下的Nginx
做伺服器是時,不管怎麼配置,都在報502 bad gateway
錯誤;
半天無果,一氣之下電腦重啟,然後,就沒問題了!!!
所以,估計有時軟體設計存在漏洞,實在無從下手,不如重啟試試看!
☪ 附錄
- 以上操作,希望你也能順利完成
- 附錄文章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又愛又恨!!!