1. 程式人生 > >ThinkPHP5.1 配置Nginx/Apache下的 URL重寫

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下,參考文件時,注意是對應著 二級目錄

為了本地環境測試的真實性,我都會習慣性對自己的專案進行虛擬域名的配置,可做參考:
在這裡插入圖片描述

  • 補充一個超坑的情況 [2018-11-26]

今天我發現,使用 phpStudy 下的 Nginx 做伺服器是時,不管怎麼配置,都在報 502 bad gateway 錯誤;
半天無果,一氣之下電腦重啟,然後,就沒問題了!!!
所以,估計有時軟體設計存在漏洞,實在無從下手,不如重啟試試看!

☪ 附錄

小插曲 【其實,這個專案真實的情況就是從零配置的

	首先
	從昨天申請完阿里雲主機服務後,整個 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又愛又恨!!!