您的位置:首页 > 运维架构 > Nginx

Nginx服务器下使用ThinkPHP的pathinfo模式的问题

2015-04-28 13:01 369 查看
LNMP一键安装包装上过后,发现thinkphp的pathinfo模式无法使用。

百度一番,发现nginx/conf/vhost/域名 文件里有开启pathinfo的说明,于是启动了pathinfo。

但是项目仍然无法运行,于是我在本地和服务器同时运行了一下代码:

<?php
var_dump($_SERVER);


发现PHP_SELF这一项有区别,so问题可能就在这里。

接下来在项目里搜索PHP_SELF,找到了这个文件:

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'],'/'));
}


也就是ThinkPHP在cgi模式下依赖了PHP_SELF,问题果然在这里

最后又百度了一番,原来是php.ini里为了屏蔽一个漏洞设置了:

cgi.fix_pathinfo=0


正是因为这一行设置,导致了PHP_SELF的值出现了偏差。

然而LNMP集成包里的pathinfo.conf已经使用

try_files $fastcgi_script_name =404


解决了这个漏洞,所以我们可以修改php.ini为

cgi.fix_pathinfo=1


重启服务器,OK,问题解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 服务器 thinkphp