最近一個項目中使用了ThinkPHP做為開發框架,URL上我們使用了PATHINFO模式,但是Nginx默認是不支持PATHINFO的,需要進行手動配置才可以,于是我們按照了以下方法進行了Nginx的PATHINFO支持配置:
修改nginx.conf,找到server中的 location ~ .php${},修改為location ~ .php {},并在其中增加以下內容:
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
不過無論我們如何測試,都發現PATHINFO模式總是不能正確運行,就算運行后,{:U}方法也總是出錯,打印$_SERVER后發現PHP_SELF總是不對。
但是依然PATHINFO不能正確正常工作,于是我們確定是ThinkPHP的配置問題,發現其實是ThinkPHP的_PHP_FILE的問題,在入口文件index.php中加入配置define('_PHP_FILE_',$_SERVER['SCRIPT_NAME']);,問題解決。
如果$_SERVER['SCRIPT_NAME'] 路徑也不對,請先替換為正確的文件路徑。