zoukankan      html  css  js  c++  java
  • 最完美解决Nginx部署ThinkPHP项目的办法,pathinfo问题的解决

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

    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指令即可。

    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;
        }
    }
    
    相信坚持的力量,日复一日的习惯.
  • 相关阅读:
    Neko's loop HDU-6444(网络赛1007)
    Parameters
    SETLOCAL
    RD / RMDIR Command
    devenv 命令用法
    Cannot determine the location of the VS Common Tools folder.
    'DEVENV' is not recognized as an internal or external command,
    How to change Visual Studio default environment setting
    error signing assembly unknown error
    What is the Xcopy Command?:
  • 原文地址:https://www.cnblogs.com/pansidong/p/14340378.html
Copyright © 2011-2022 走看看