thinkphp在Nginx沒有pathinfo的情況出現.PHP的文件,這個讓人很是糾結。在服務器是Linux,web服務器是nginx, CGI接口是FASTCGI,就會出現這個問題。
問題原因:ThinkPHP/common/runtime.php中定義IS_CGI常量的定義有問題;錯誤代碼:
在fpm下,PHP_SAPI的值是fpm-fcgi,所以判斷IS_CGI爲0。導致在定義_PHP_FILE_常量時錯誤,進而導致
ThinkPHP/Lib/Core/Dispatcher.class.php中定義__APP__常量值錯誤。而ThinkPHP/Common /functions.php中U()方法定義用到__APP__,導致U()創建的URL錯誤;U()部分代碼:
簡單來說,當cgi.fix_pathinfo=0時,_PHP_FILE_獲取的值是.php,導致U函數生成URL不正確,改爲1後,_PHP_FILE_獲取的值是index.php。
但是cgi.fix_pathinfo=1時會有安全隱患,目前暫時先把代碼改成如下了:
解決方案:簡單粗暴修改如上:文件地址thinkphp3.2版本及以上的目錄位置:thinkphp