nginx php_self,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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值