Nginx上ThinkPHP的PATHINFO模式支持

来源:互联网 发布:歼20服役知乎 编辑:程序博客网 时间:2024/03/29 04:34

Nginx上ThinkPHP的PATHINFO模式支持

石头 发布于2012-2-20 21:01:56 分类: 小技巧 已浏览1846次 网友评论7条 我要评论

最近一个项目中使用了ThinkPHP做为开发框架,URL上我们使用了PATHINFO模式,但是Nginx默认是不支持PATHINFO的,需要进行手动配置才可以,于是我们按照了以下方法进行了Nginx的PATHINFO支持配置:

修改nginx.conf,找到server中的 location ~ .php${},修改为location ~ .php {},并在其中增加以下内容:

view source
print?
1set $path_info "";
2set $real_script_name $fastcgi_script_name;
3if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
4    set $real_script_name $1;
5    set $path_info $2;
6}
7fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
8fastcgi_param SCRIPT_NAME $real_script_name;
9fastcgi_param PATH_INFO $path_info;

不过无论我们如何测试,都发现PATHINFO模式总是不能正确运行,就算运行后,{:U}方法也总是出错,打印$_SERVER后发现PHP_SELF总是为“/”,因为我们Nginx版本为0.7.54我们开始怀疑是不是版本自身的BUG?于是我将Nginx进行了无缝升级至1.0.12,代码如下:

01cd /usr/download/
02wget http://nginx.org/download/nginx-1.0.12.tar.gz
03tar -zxvf nginx-1.0.12.tar.gz
04cd nginx-1.0.12
05/opt/nginx -V
06./configure (上面的configure结果)
07make
08mv opt/nginx /opt/nginx.old
09cp objs/nginx /opt/nginx
10make upgrade

但是依然PATHINFO不能正确正常工作,于是我们确定是ThinkPHP的配置问题,正在我们不知道怎么办时,同事发现其实是ThinkPHP的_PHP_FILE的问题,在入口文件index.php中加入配置define('_PHP_FILE_',$_SERVER['SCRIPT_NAME']);,问题解决。

0 0