前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >续:让nginx支持pathinfo

续:让nginx支持pathinfo

作者头像
horsley
发布2022-08-16 11:19:28
5350
发布2022-08-16 11:19:28
举报
文章被收录于专栏:每个用户仅限创建一个专栏

续上一篇《让nginx支持pathinfo

原文的配置在我本机(Win,Nginx1.2.4)还算可以,但是有一个bug,就是如果url里面包含trailing slash(最后的斜杠/)的话,PATH_INFO捕捉到的值有误,为ATH_INFO,同时$_SERVER数组里面多了一个键名为ORIG_PATH_INFO的元素其值为我们期望的path_info,非常怪异,一开始以为是$path_info变量未定义的问题,$p不见了,剩下ath_info,后面改过变量名之后还是不行,证明不是这个问题。

同样的配置搬到服务器上面用(CentOS6,Nginx1.0.10)完全行不通,根据官方指引(PHPFcgi Common ErrorsNginx Pitfalls)排查无果,再在网上找了许许多多的方案来来回回测试了好几十遍,还是很有问题,而且官方指引(try_files)里面明确指出那种检查文件之后rewrite的方法是terrible的,应该使用try_files代替。

折腾了很久之后还是有各种问题,其实很多PHP框架(如Yii、CI、ThinkPHP)、流行的应用系统(Wordpress、Joomla)等都支持另外一种兼容模式的pathinfo,就是通过其他方法获取path_info值,大部分都通过服务器配置把$request_uri转换为一个queryString参数后转发给index.php,个人目前认为这个方式不太好因为会污染get参数,要注意不要使用保留的get键名,但是如果外部直接在url里面指定该参数不知道会发生什么事。

既然是从$request_uri里面来的,那么直接从$_SERVER‘REQUEST_URI’里面提取path_info好了,下面是服务器上面的配置。

代码语言:javascript
复制
location / {
    try_files $uri $uri/ /index.php;
}
location ~ ^.+.php($|/) {
    #fastcgi_split_path_info ^((?U).+.php)(.*)$;
    include fcgi.conf;
    fastcgi_param  PATH_INFO          $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
    #fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013 年 3 月 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档