Thinkphp配置文件:如果在Nginx服务器上,最好还是把 'URL_MODEL' => 2, 设置上,不然出现的问题奇奇怪怪。
最新更新,在看Nginx文档的时候,发现它自带有pathinfo的处理方法:
syntax: | fastcgi_split_path_info |
default: | — |
context: | location |
fastcgi_split_path_info regex 定义一个正则表达式,可以抓取一个值给变量$fastcgi_path_info,正则表达式一共可以抓取2个值,第一个是$fastcgi_script_name。第二个是$fastcgi_path_info 。
location ~ \.php/?.*$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include /usr/local/nginx/conf/fastcgi_params;
}
这样就可以轻松的解决thinkphp的pathinfo问题了。如果你项目还需要隐藏index.php或者使用了路由。在执行PHP文件的location前边加上一个location重写:
#rewrite
location /blogforit/ {
index index.php;
if (!-e $request_filename) {
rewrite ^/blogforit/(.*)$ /blogforit/index.php?s=$1 last;
}
break;
}
1.由于Nginx默认不支持pathinfo模式,如果你的网站路径如:http://192.168.10.212/AndyCMS/index.php/Section/view/id/3以斜杠划分,则Nginx默认把其当为一个目录,就会出现一个404错误,找不到文件,具体可以查看error日志。
解决方法:以下是我的最简单的配置文件。
location ~ \.php/?.*$ {
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1; //将真的脚本名即index.php赋值给变量
set $path_info $2; //得到后面的pathinfo路径如/Section/view/id/3
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param PATH_INFO $path_info;
include /usr/local/nginx/conf/fastcgi_params;
}
2.我们使用了Thinkphp的路由转向和隐藏index.php,需要修改如下nginx配置:
假如我的项目目录是:/usr/local/nginx/html/blogforit 。注(我的访问模式都是从localhost访问的,如:localhost/blogforit,具体如果有域名访问的具体配置)
我们就需要修改nginx配置文件:
location /blogforit/ {
index index.php;
if (!-e $request_filename) {
rewrite /blogforit/(.*) /blogforit/index.php/$1 last;
}
break;
}
location ~ \.php/?.*$ {
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1; //将真的脚本名即index.php赋值给变量
set $path_info $2; //得到后面的pathinfo路径如/Section/view/id/3
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param PATH_INFO $path_info;
include /usr/local/nginx/conf/fastcgi_params;
}