Nginx服务器不支持PATH_INFO的问题及解决办法

Nginx服务器不支持PATH_INFO的问题及解决办法

最近在写一个小程序,然后里面自己写了个URL的处理器,比如说访问index.php/article 那么就会自动加载进来article页面,访问index.php/home就会自动加载home页面。

在Apache服务器中使用了 $_SERVER[‘HTTP_HOST’] . $_SERVER[‘REQUEST_URI’] 获取完整的URL地址并且对地址进行解析是成功的,因为在Apache中访问

index.php/article会被解析成访问index.php这个文件,但是在Nginx中这样访问的话就会出现404错误,页面未找到。

Nginx服务器不支持PATH_INFO的问题及解决办法

这是什么原因造成的呢?

在Apache中, 当不加配置的时候, 对于PHP脚本, AcceptPathInfo是默认接受的, 也就是说:

如果在服务器在存在一个/iwenku/index.php/

那么, 对于如下请求,

  1. 127.0.0.1/iwenku/index.php/article/
  2. 127.0.0.1/iwenku/article/

Apache都接受, 都会认为是对index.php的访问, 并会设置PATH_INFO为article

而对于Nginx下, 是不支持PATH INFO的, 也就是它不会默认设置PATH_INFO.

而因为默认的配置文件对PHP的支持只是很基础的, 所以对于默认配置来说对于上面的访问也会是404, 提示找不到文件出错.

对这个问题的解决方案便是修改Nginx的配置文件,模拟PATH_INFO:

首先 , 我们知道在Nginx中, 是通过对文件名的扩展名匹配, 来决定是否要交给php cgi服务器去解释的. 在nginx.conf中一般都有如下的默认配置段:

location ~ .php$ { //$代表结尾,这样对于后面跟随内容的URL地址就不会进行解析
     fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; }

所以,对于形如/iwenku/index.php/article/这样的文件路径, Nginx是不会正确的交给php cgi服务器的. 所以我们需要改写这段配置为:

location ~ .php {//只要含有.php那么就进行解析
     fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; }

现在, 脚本路径已经交由PHP自己处理了. 那怎么增加PATH_INFO呢?

首先需要设置PHP中的cgi.fixcgi.fix_pathinfo=1(这个需要在php.ini文件中配置,如果没有需要自己添加)

打开这个配置项以后, PHP会去根据CGI规范来检查SCRIPT_FILENAME中那部分是访问脚本和PATH_INFO, 并根据SCRIPT_NAME来修改PATH_INFO(和PATH_TRANSLATED)为正确的值

然后需要更改nginx.conf文件的配置

location ~ .php {

  root “E:\www\wwwroot”;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  #pathinfo support
  set $real_script_name $fastcgi_script_name;
  set $path_info ””;
  if ( $fastcgi_script_name ~ “^(.+?.php)(/.+)$”){

  set $real_script_name $1;
  set $path_info $2;
  }
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112493.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 企业社交,阿里钉钉向左,企业微信向右

    企业社交,阿里钉钉向左,企业微信向右在企业社交领域里,阿里钉钉和企业微信这两大巨头,正在各自轨道上加速突进,以不同的模式在企业级服务市场引发深刻变化。进击的阿里钉钉截止到2018年底,阿里钉钉上的企业组织达到了700万家以上,也就是说钉钉已经实现了对16%中国企业的覆盖。但进击的钉钉并不满足于此,它在两个方向上发起了新的挑战:一是在巩固原有中小企业市场的基础上,开始向大企业市场延伸;并以全链路数字化办公解决方案为基础,将钉钉从“…

    2022年5月14日
    44
  • java IO流详尽解析「建议收藏」

    java IO流详尽解析「建议收藏」流的概念和作用,好吧,百度了一张图片,不错学习JavaIO,不得不提到的就是JavaIO流。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由

    2022年5月22日
    32
  • Microbit  Turnipbit  孩子也能做的声光控开关

    Microbit  Turnipbit  孩子也能做的声光控开关

    2022年3月13日
    42
  • 正则表达式全解析+常用示例「建议收藏」

    正则表达式全解析+常用示例「建议收藏」在开始写这篇文章之前,我的心里还是纠结的。我在问自己要不要写这篇东西,关于相似的内容网上多如牛毛,而且还不乏珍品,况且,就算我写了也不一定能写的好。但是现在你既然看到了,那说明我还是写了出来。就算是对自己学习的一个总结吧!同时也把常见的常用的正则表达式给收集整理出来,以便用到的时候不用满世界的找。关于正则表达式一直都是个让很多程序员都觉得很郁闷的一个东西,我觉得创造正则表达式的那个家伙简直就是

    2022年5月17日
    41
  • 五大分布式事务,你了解多少?

    五大分布式事务,你了解多少?

    2020年11月20日
    341
  • 5g 网络切片 边缘计算_5g网络切片技术前景

    5g 网络切片 边缘计算_5g网络切片技术前景紧接上文接入网RANRAN切片提供了基于切片ID的AMF/UPF选择,并提供了相对静态的资源控制和优先级控制。此外,RAN通过RIC(RANIntelligentControl,通过E2接口连接gNB)实现了针对动态资源调度和优先级控制等的实时闭环控制。关于RAN切片的基本机构可参照下图优先级控制在未适用网络切片前,显然,gNB并不能针对UE的不同服务做不同的优先级控制。在适用了5G的网络切片后,运营商就能就能通过不同的网络切片在无线侧调度不同的优先级(这是显而易见的,哈哈)。譬如UE1用高优

    2022年9月26日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号