在nginx中配置支持php_info的参数

条件:nginx >=7.03;
PHP 4 >= 4.0.3;
启动fastcgi

设置:
一、nginx.conf
        location ~ \.php {
root html;
fastcgi_pass 127.0.0.1:9090;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
#include fastcgi_params;
##[配置支持php的path_info]
include fastcgi.conf;
##---------------------------
}
要点:原来location ~ \.php${后面的$要去掉,以支持index.php/view形式;因为fastcgi要设置正则形式,故把include fastcgi_params屏蔽掉。
二、fastcgi.conf

## 放在开头设置参数变量

## [配置支持php的path_info] 下面这段需要关闭php.ini中的cgi.fix_pathinfo(即cgi.fix_pathinfo = 0)

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$fastcgi_script_name;

#fastcgi_param SCRIPT_NAME $fastcgi_script_name;
## [配置支持php的path_info]
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
##------------------ 下面的原有参数省略不写 ---------------------

下一步就是重启,试下xxx/index.php/view能不能正确解析
在nginx文档中也举了另一个匹配path_info的例子:
location ~ ^.+\.php {
(...)
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
(...)
}
第一个引用(.+\.php)加上/path/to/php将作为SCRIPT_FILENAME,第二个引用(.*)为PATH_INFO,例如请求的完整URI为show.php/article/0001,则上例中SCRIPT_FILENAME的值为/path/to/php/show.php,PATH_INFO则为/article/0001。
下面是第三种,风雪之隅的配置(php.ini  cgi.fix_pathinfo = 1)

location ~ .php {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
}


这个指令通常用于一些通过PATH_INFO美化URI的框架(例如CodeIgniter)。
posted @ 2013-03-01 19:20  sumsung753  阅读(349)  评论(0编辑  收藏  举报