php_self nginx,nginx中的PATH_INFO为什么会影响$_SERVIER['PHP_SELF']
發現問題:
使用ThinkPHP3.2.2在nginx部署網站,設置URL_MODEL=2,使用U方法在本地生成的鏈接形如:/public/index
但是在部署在nginx上卻出現了問題 其中的URL生成了./public/index
通過追尋ThinkPHP源碼在ThinkPHP.php文件中發現了如下代碼:
if(IS_CGI) {
//CGI/FASTCGI模式下
$_temp = explode('.php',$_SERVER['PHP_SELF']);
define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));
}else {
define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/'));
}
這是問題的根源
訪問:http:www.xxx.com/public/index
在apache下$_SERVER['PHP_SELF']顯示./index.php/public/index
而在nginx中顯示空白
訪問:http:www.xxx.com/index.php/public/index
在apache下$_SERVER['PHP_SELF']顯示./index.php/public/index
而在nginx中顯示/public/index
最后發現是在nginx開啟PATH_INFO時出現了奇異。
我的nginx 中PATH_INFO段的配置是:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info; #只要設置了這行PHP_SELF返回的就出問題
try_files $fastcgi_script_name =404;
回復內容:
發現問題:
使用ThinkPHP3.2.2在nginx部署網站,設置URL_MODEL=2,使用U方法在本地生成的鏈接形如:/public/index
但是在部署在nginx上卻出現了問題 其中的URL生成了./public/index
通過追尋ThinkPHP源碼在ThinkPHP.php文件中發現了如下代碼:
if(IS_CGI) {
//CGI/FASTCGI模式下
$_temp = explode('.php',$_SERVER['PHP_SELF']);
define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));
}else {
define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/'));
}
這是問題的根源
訪問:http:www.xxx.com/public/index
在apache下$_SERVER['PHP_SELF']顯示./index.php/public/index
而在nginx中顯示空白
訪問:http:www.xxx.com/index.php/public/index
在apache下$_SERVER['PHP_SELF']顯示./index.php/public/index
而在nginx中顯示/public/index
最后發現是在nginx開啟PATH_INFO時出現了奇異。
我的nginx 中PATH_INFO段的配置是:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info; #只要設置了這行PHP_SELF返回的就出問題
try_files $fastcgi_script_name =404;
這個$_SERVER與服務器的配置有很大關系
try_files $fastcgi_script_name =404;這個去掉就可以了,$_SERVER['PHP_SELF']這個就會有的
不需要去掉 try_files $fastcgi_script_name =404; 這個配置是解決php.ini配置項cgi.fix_pathinfo=1時的安全漏洞的。這個問題是樓主的服務器php.ini配置為cgi.fix_pathinfo=0造成的錯誤
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的php_self nginx,nginx中的PATH_INFO为什么会影响$_SERVIER['PHP_SELF']的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: c++ 字符串赋给另一个_7.2 C++
 - 下一篇: 2019编译ffepeg vs_如何在w