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)
上一篇 2021年11月6日 下午8:00
下一篇 2021年11月6日 下午9:00


相关推荐

  • pycharm删除的文件找回步骤

    pycharm删除的文件找回步骤有遇到 PyCharm 不小心删除文件的时候 可以通过以下方式将其找回 右击项目 gt 选择 localhistory gt 点击 ShowHistory gt 点击之后可以看到自己的删除记录 一般在第一条 点击 Revert 一般即可恢复

    2026年3月18日
    1
  • 蓝牙脂肪秤模块测量原理

    蓝牙脂肪秤模块原理跟普通电子体重秤的原理差不多,都是利用压力传感器及芯片设计完成功能的实现。蓝牙电子秤的外形和地面有四个接触点,四个接触点那里都放着一种压力传感器,压力传感器将人体的重量转换成电信号,后经过芯片设计完成处理器AD采样,再经过换算便可以得到人体的体重。蓝牙脂肪秤模块测量体脂是通过电阻抗法测量出来的,它的具体原理是由电极片发出微弱电流,与人体形成一个闭环,通过肌肉易导电,脂肪不导电的…

    2022年4月11日
    56
  • 致 Python 初学者「建议收藏」

    致 Python 初学者「建议收藏」欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多Python的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触python这门编程语言,从2009年开始单一使用python应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的Python初学者走出困境、快速成长。希望我的经验能真正帮到你

    2022年4月27日
    44
  • (一)activiti学习笔记

    (一)activiti学习笔记

    2021年7月12日
    86
  • java head first_看完《head first java》之后能够干什么?

    java head first_看完《head first java》之后能够干什么?你想用 Java 来干嘛 Web 安卓 算法研究 javase 只是基础 如果是 JavaWEB 那么就先学完 JAVASE 后停一下 JAVA 先去看 HTML CSS Javascript Javascript 和 Java 没有一毛钱的关系 就是老婆和老婆饼的关系 出师的标准是 能手工写一个静态登录页面 先学 html 了解清楚什么是主要的 html 标签是干什么的 学 css 学着给 html 化化妆 学 javas

    2026年1月27日
    3
  • 我的友情链接

    我的友情链接

    2022年3月12日
    44

发表回复

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

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