thinkphp在nginx没有pathinfo的情况出现.php的URL的解决方法

thinkphp在nginx没有pathinfo的情况出现.php的文件,这个让人很是纠结。

在服务器是linux,web服务器是nginx, CGI接口是FASTCGI,就会出现这个问题

问题原因:ThinkPHP/common/runtime.php中定义IS_CGI常量的定义有问题;
错误代码:

5304678604f66.jpg - 大小: 193.49 KB - 尺寸: 806 x 301 - 点击打开新窗口浏览全图

在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()部分代码:

530467c5c40b0.jpg - 大小: 283.92 KB - 尺寸: 861 x 545 - 点击打开新窗口浏览全图

简单来说:

当cgi.fix_pathinfo=0时
_PHP_FILE_获取的值是.php
导致U函数生成URL不正确
改为1后
_PHP_FILE_获取的值是index.php
但是cgi.fix_pathinfo=1时会有安全隐患
目前暂时先把代码改成如下了


    if (IS_CGI) {
    //CGI/FASTCGI模式下
                //$_temp  = explode('.php',$_SERVER['PHP_SELF']);
                //define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',
                //$_temp[0].'.php'),'/'));
                define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/'));
            } else {
                define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/'));
            }



上一篇: 微信中里如何判断页面被分享到朋友圈和微信号的成功,附代码
下一篇: 【转】百度、腾讯和阿里内部的级别和薪资待遇是什么样的?

#1
回复 刘宝宝 2016-12-02, 1:50 PM
我找了好久解决这个问题的方法,终于弄好了,谢谢!!!
回复 jincon 2016-12-24, 1:49 PM
@刘宝宝: 不客气。呵呵~
发表评论

评论内容 (必填):