目录
  • 一.简介
  • 二.配置
  • 三.参数

一.简介

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;
本文版权归作者所有,欢迎转载,请务必添加原文链接。

更多文章请关注《万象专栏》