Nginx开启php_info
一.简介
pathinfo是php需要的东西,php可以用这个函数来获得信息。
http://wangying.sinaapp.com/tools/index.php/login/index
这个访问,Apache都接受, 都会认为是对index.php的访问, 并会设置PATH_INFO为
/login/index
print_r($_SERVER[“PATH_INFO”]);//login/index
php程序或者页面,就可以根据这个信息来做一些操作,或者处理东西。但默认Nginx是不开启的。
二.配置
对于形如tools/index.php/login/index 这样的文件路径, Nginx正则匹配为路径而不是php文件. 所以我们需要去掉($)
1.使用php内部解析,将Nginx获取的变量直接传给后面的php页面。
location ~ .php { #去掉了最后的$
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
2.使用nginx正则解析,手动用if命令将访问路径解析,然后作为PATH_INFO传递给php页面。
Nginx默认获取不到PATH_INFO的值,得通过fastcgi_split_path_info指定定义的正则表达式来给$fastcgi_path_info赋值。
#配置方案 使用nginx模块fastcgi_split_path_info(nginx版本>0.7.31)
location ~ \.php {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
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;
}
三.参数
#不推荐,这是正则后的值传递给path_info,会不安全
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#通过paht_info变量传递
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;