最完美解决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)