最近使用thinkPHP框架進行開發的時候遇到一個問題,把專案部署到Linux上用nginx當伺服器的情況下,URL重定向出現問題,同樣的URL字尾,在本地環境可以正常訪問,在伺服器上就出現了404 ,但是使用TP的全路徑URL是可以訪問的。後來經過檢視發現是由於本地環境和伺服器上使用的服務載體不同導致的,本地環境使用的是Apache,伺服器上使用的是nginx。經過檢視TP的官方文件,解決了問題:
Apache的URL重寫:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
nginx的重寫,需要在nginx的配置資訊中新增:
location / { // …..省略部分程式碼
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
然後要把專案的URL_MODEL改成2:
`URL_MODEL` => 2, URL訪問模式,可選引數0、1、2、3,代表以下四種模式: 0
(普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (相容模式) 預設為PATHINFO 模式
參考文件:TP官方文件