最完美解决Nginx部署ThinkPHP项目的办法
【摘要】
网上通用解决方法的配置如下:
server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给ThinkPHP处理 ...
网上通用解决方法的配置如下:
-
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;
-
}
-
}
其实应该使用更简单的方法,fastcgi模块自带了一个fastcgi_split_path_info指令专门用来解决此类问题的,该指令会根据给定的正则表达式来分隔URL,从而提取出脚本名和path info信息,使用这个指令可以避免使用if语句,配置更简单。
另外判断文件是否存在也有更简单的方法,使用try_files指令即可。
方法二会有不可预知的错误
try_files $uri /index.php$uri;这个地方要改成 try_files $uri /index.php/$uri;
-
server {
-
...
-
location / {
-
index index.htm index.html index.php;
-
#如果文件不存在则尝试TP解析
-
try_files $uri /index.php$uri;
-
-
-
}
-
location ~ .+\.php($|/) {
-
root /var/www/html/website;
-
fastcgi_pass 127.0.0.1:9000;
-
fastcgi_index index.php;
-
-
#设置PATH_INFO,注意fastcgi_split_path_info已经自动改写了fastcgi_script_name变量,
-
#后面不需要再改写SCRIPT_FILENAME,SCRIPT_NAME环境变量,所以必须在加载fastcgi.conf之前设置
-
fastcgi_split_path_info ^(.+\.php)(/.*)$;
-
fastcgi_param PATH_INFO $fastcgi_path_info;
-
-
#加载Nginx默认"服务器环境变量"配置
-
include fastcgi.conf;
-
}
-
}
文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/lxw1844912514/article/details/100029067
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)