网上通用解决方法的配置如下:
-
server {
-
...
-
location / {
-
index index.htm index.html index.php;
-
#访问路径的文件不存在则重写URL转交给ThinkPHP处理
-
if (!-e $request_filename) {
-
rewrite ^/(.*)$ /index.php/$1 last;
-
break;
-
}
-
}
-
location ~ \.php/?.*$ {
-
root /var/www/html/website;
-
fastcgi_pass 127.0.0.1:9000;
-
fastcgi_index index.php;
-
#加载Nginx默认"服务器环境变量"配置
-
include fastcgi.conf;
-
-
#设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
-
set $fastcgi_script_name2 $fastcgi_script_name;
-
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
-
set $fastcgi_script_name2 $1;
-
set $path_info $2;
-
}
-
fastcgi_param PATH_INFO $path_info;
-
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
-
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
-
}
-
}
http://blog.csdn.net/tinico/article/details/18033573
其实应该使用更简单的方法,fastcgi模块自带了一个fastcgi_split_path_info指令专门用来解决此类问题的,该指令会根据给定的正则表达式来分隔URL,从而提取出脚本名和path info信息,使用这个指令可以避免使用if语句,配置更简单。
另外判断文件是否存在也有更简单的方法,使用try_files指令即可。