Nginx上ThinkPHP的PATHINFO模式支援
阿新 • • 發佈:2019-02-18
最近一個專案中使用了ThinkPHP做為開發框架,URL上我們使用了PATHINFO模式,但是Nginx預設是不支援PATHINFO的,需要進行手動配置才可以,於是我們按照了以下方法進行了Nginx的PATHINFO支援配置:
修改nginx.conf,找到server中的 location ~ .php${},修改為location ~ .php {},並在其中增加以下內容:
1 |
set $path_info "" ; |
2 |
set $real_script_name
$fastcgi_script_name; |
3 |
if ($fastcgi_script_name
~ "^(.+?.php)(/.+)$" )
{ |
4 |
set $real_script_name
$1; |
5 |
set $path_info
$2; |
6 |
} |
7 |
fastcgi_param
SCRIPT_FILENAME $document_root$real_script_name; |
8 |
fastcgi_param
SCRIPT_NAME $real_script_name; |
9 |
fastcgi_param
PATH_INFO $path_info; |
不過無論我們如何測試,都發現PATHINFO模式總是不能正確執行,就算執行後,{:U}方法也總是出錯,列印$_SERVER後發現PHP_SELF總是為“/”,因為我們Nginx版本為0.7.54我們開始懷疑是不是版本自身的BUG?於是我將Nginx進行了無縫升級至1.0.12,程式碼如下:
01 |
cd /usr/download/ |
02 |
wget
http://nginx.org/download/nginx-1.0.12. tar .gz |
03 |
tar -zxvf
nginx-1.0.12. tar .gz |
04 |
cd nginx-1.0.12 |
05 |
/opt/nginx
-V |
06 |
./configure
(上面的configure結果) |
07 |
make |
08 |
mv opt/nginx
/opt/nginx.old |
09 |
cp objs/nginx
/opt/nginx |
10 |
make upgrade |
但是依然PATHINFO不能正確正常工作,於是我們確定是ThinkPHP的配置問題,正在我們不知道怎麼辦時,同事發現其實是ThinkPHP的_PHP_FILE的問題,在入口檔案index.php中加入配置define('_PHP_FILE_',$_SERVER['SCRIPT_NAME']);,問題解決。