nginx开启pathinfo模式,让nginx识别Thinkphp路由传参

我们在安装lnmp一键安装的时候,一般都没有开启访问pathinfo模式

这种模式在比较多的框架中用到,比如国人的ThinkPHP,还比如C写的Yaf也用到,不支持就比较可惜了。


最近使用YAF框架做WAP端,发现本地访问http://m.domystery.com/Dmy/Word/nview/id/854没有问题,上到nginx服务器上通过I方法怎么也获取不到参数值,GET依然如此,心想这种问题,本地好使传到服务器上咋就不好了?

查了半天,nginx本身不支持pathinfo模式,不能正确理解这种/规则。好吧,各种找资料,调了半天,终于通过修改vhost配置,问题解决了~OH YEAH



if (!-e $request_filename)

{

rewrite ^\/(.*)$ /index.php/$1 last;

break;

}

location ~ \.php

{

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fcgi.conf;

set $path_info "";

set $real_script_name $fastcgi_script_name;

if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {

set $real_script_name $1;

set $path_info $2;

}

fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

fastcgi_param SCRIPT_NAME $real_script_name;

fastcgi_param PATH_INFO $path_info;

}

注释版:


location ~ \.php

{

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fcgi.conf;

set $path_info "";#初始化一个变量

set $real_script_name $fastcgi_script_name;#初始化一个变量,并且获取到一个原始赋值

if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {#检测如果.php后面还存在/开始参数,将参数处理

set $real_script_name $1;#将第一个正则子串匹配到的赋值

set $path_info $2;#将第二个正则子串匹配到的赋值

}

fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;#修改SCRIPT_FILENAME值

fastcgi_param SCRIPT_NAME $real_script_name;#修改SCRIPT_NAME值

fastcgi_param PATH_INFO $path_info;#修改PATH_INFO值

#上述三个赋值都是replace into的模式,这些值都是写在fcgi.conf中

}



关于我 |  联系我们 |  合作伙伴 |  用户注册 |  帮助中心 |  版权声明
正在加载中……