最完美解决Nginx部署ThinkPHP项目的办法

举报
lxw1844912514 发表于 2022/03/27 01:04:40 2022/03/27
【摘要】 网上通用解决方法的配置如下:   server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给ThinkPHP处理 ...

网上通用解决方法的配置如下:

 


    
  1. server {
  2. ...
  3. location / {
  4. index index.htm index.html index.php;
  5. #访问路径的文件不存在则重写URL转交给ThinkPHP处理
  6. if (!-e $request_filename) {
  7. rewrite ^/(.*)$ /index.php/$1 last;
  8. break;
  9. }
  10. }
  11. location ~ \.php/?.*$ {
  12. root /var/www/html/website;
  13. fastcgi_pass 127.0.0.1:9000;
  14. fastcgi_index index.php;
  15. #加载Nginx默认"服务器环境变量"配置
  16. include fastcgi.conf;
  17. #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
  18. set $fastcgi_script_name2 $fastcgi_script_name;
  19. if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
  20. set $fastcgi_script_name2 $1;
  21. set $path_info $2;
  22. }
  23. fastcgi_param PATH_INFO $path_info;
  24. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
  25. fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
  26. }
  27. }






其实应该使用更简单的方法,fastcgi模块自带了一个fastcgi_split_path_info指令专门用来解决此类问题的,该指令会根据给定的正则表达式来分隔URL,从而提取出脚本名和path info信息,使用这个指令可以避免使用if语句,配置更简单。
另外判断文件是否存在也有更简单的方法,使用try_files指令即可。

方法二会有不可预知的错误

try_files $uri /index.php$uri;这个地方要改成 try_files $uri /index.php/$uri;

   


    
  1. server {
  2. ...
  3. location / {
  4. index index.htm index.html index.php;
  5. #如果文件不存在则尝试TP解析
  6. try_files $uri /index.php$uri;
  7. }
  8. location ~ .+\.php($|/) {
  9. root /var/www/html/website;
  10. fastcgi_pass 127.0.0.1:9000;
  11. fastcgi_index index.php;
  12. #设置PATH_INFO,注意fastcgi_split_path_info已经自动改写了fastcgi_script_name变量,
  13. #后面不需要再改写SCRIPT_FILENAME,SCRIPT_NAME环境变量,所以必须在加载fastcgi.conf之前设置
  14. fastcgi_split_path_info ^(.+\.php)(/.*)$;
  15. fastcgi_param PATH_INFO $fastcgi_path_info;
  16. #加载Nginx默认"服务器环境变量"配置
  17. include fastcgi.conf;
  18. }
  19. }

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100029067

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。