关于Nginx不支持pathinfo问题解决

在nginx下是不支持pathinfo的,但是apache支持pathinfo。
pathinfo是什么?
首先我们在nginx的html目录下新键1.php文件,打印$_SERVER

<?php
echo "<pre>";
print_r($_SERVER);

尝试在地址栏输入如下参数
在这里插入图片描述
结果返回404
在这里插入图片描述
同样的代码在apache下测试
在这里插入图片描述
没有报错 并且页面多了PATH_INFO的字段 值为 url地址后面的参数 a/b/c 这就是pathinfo
一些框架中他的地址栏格式为 index.php/Home/Index/goods/1…这种格式在apache中可以正常解析,但在nginx中是不支持的,也就是你的框架项目直接拿到nginx上是跑不起的。
解决办法如下

//基础配置
location ~ \.php$ { 
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /$DOCUMENT_ROOT$fastcgi_script_name;
           include        fastcgi_params;
}
//修改后的配置
location ~ \.php(.*)$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /$DOCUMENT_ROOT$fastcgi_script_name;
           fastcgi_param  PATH_INFO $1;
           include        fastcgi_params;
       }

通过正则反向引用将.php后面的参数传递给pathinfo
浏览器测试传入参数 1.php/a/b
页面生成PATH_INFO字段
在这里插入图片描述
此时解决Nginx不支持pathinfo的问题。

但有些框架他的地址栏格式是这样的
域名+a/b/c,域名后面没有index.php
dian.com/show/eic
这时候要使你的项目在nginx上运行就要通过url地址重写解决问题

 location / {
      root html/daikuan/public;
      index index.php index.html ;
      //添加url重写
      if ( !-e $request_filename) {
           rewrite (.*)$ /index.php/$1;
      }

但是这种方式一直导致
500 Internal Server Error
不知道什么原因,不过在nginx中还可以通过try_files解决上述问题

location / {
            root html/daikuan/public;
            index index.php index.html ;
            //tryfile
           try_files $uri /index.php?$uri;
        }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值