pathinfo是什么:
path_info不是nginx的功能,它是php的功能。php有两个pathinfo,一个是环境变量$_SERVER['PATH_INFO'] ,另一个是函数path_info();
path_info()的功能是可以将输入的url做判断,并返回对url的解析,但nginx并不是作用于它。
想要对他们两个有更深入了解可以去这里看看:
http://www.2cto.com/os/201212/176543.html
nginx可以可设置的是$_SERVER['PATH_INFO']的值。
$_SERVER['PATH_INFO']的作用是返回url的一部分,并用与重写。
nginx的配置:
进入阿里云的控制台,输入命令 : cd usr/local/nginx/conf回车(这是我阿里云的linux的nginx配置文件的路径,不知道别人家的会不会不同,不同也没关系,反正目标是nginx.conf文件),进入的conf文件夹,继续输入命令 vim nginx.conf回车
打开了nginx.conf配置文件,按 i 键,找到http下的server下开始配置:
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000; //这里不用担心你的服务器的ip是否和这个不一样,不用怀疑,
//这样写就行了
fastcgi_index index.php;
include fcgi.conf;
set $script $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
//上行的if和“(”间要有空格,这是lunix的语法,不然会报错
//报位置变量
set $script $1; //注意这里是1234的1不是字母l
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$script;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param PATH_INFO $path_info;
}
到这里就完成配置,接下来就重启一下nginx,我不晓得别的重启方法,我的重启方法是重启amh我使用了amh面板的,另外说一句amh的重启命令。先是cd回根目录,找etc目录,cd进去,然后输入:init.d/amh-start回车。
还有另外一种配置方法:
location ~ \.php { #去掉$
root H:/PHPServer/WWW;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句
fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
接下来的步骤和上面一样。
这两种方法我都实践过,都是可以支持ThinkPHP的,但是第二种有点缺陷,我原先放在阿里云的用原生PHP的写的Web就访问不了,然后我换了第二种配置,完美支持。
题外:
Apache是默认支持path_info, 而nginx不支持,对于刚接触的人可能会因为觉得配置nginx的pathinfo会很麻烦而止步,装回Apache。我想说请不要这么做,因为比起Apache,nginx更加稳定更加强大,而且我们因为麻烦就止步,这可不是进步的节奏。
这是一篇分析Apache和nginx的技术blog:http://www.cnblogs.com/huangye-dream/p/3550328.html