thinkphp nginx php-fpm url rewrite 導致 404 錯誤


## thinkphp nginx php-fpm url rewrite 導致 404 錯誤

之前thinkphp的系統部署在apache上,考慮到在並發性能nginx比apache強悍得多,所以在centos上以 nginx+php-fpm模式重新部署了thinkphp系統,結果發現諸如
<pre>/index.php/home/user/verify</pre>
此類的url nginx會報404錯誤,但是改成
<pre>/index.php?s=/home/user/verify</pre>
之后卻能夠訪問,這說明前一種url nginx不支持,那為啥會不支持呢?要解決這個問題首先要明白thinkPHP的幾種url模式。

### thinkPHP URL模式
#### 1. pathinfo 模式
<pre>/index.php/home/user/verify</pre>
*這種url格式,需要服務器支持pathinfo才行*
#### 2. rewrite 模式
<pre>/?s=/home/user/verify</pre>
*去掉index.php的偽靜態模式*
#### 3. 兼容模式
普通的模式加s=/參數/或者m=model&a=action

### thinkPHP URL模式配置
在文件 /Application/Common/conf.php 中修改 URL_MODEL 的值
<pre>'URL_MODEL' => 3 </pre>

### nginx pathinfo模式配置
*nginx默認是不支持pathinfo模式的,需要手動添加rewrite規則來支持*

#### 1. 打開/nginx/conf/vhost目錄下的站點配置文件。
#### 2. 在server節點中增加 如下location規則:
<pre class="lang:ini decode:true " >
#以index.php開頭的uri
location ~ ^/index.php(.*)
{
#如果文件或者路徑不存在
if (!-e $request_filename)
{
#將pathinfo模式的uri重寫成普通模式
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
break;
}
}
</pre>
#### 3. 重新載入nginx配置信息
<pre class="lang:sh decode:true">
service nginx reload
</pre>

## Done !


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM