最新公告
  • 欢迎您光临源码资源下载站,一个优质的网站源码和小程序源码分享基地。
  • pathinfo模式有什么用?如何开启?

    正文概述 建站知识   2023-12-15 21:15:32  
    pathinfo模式是伪静态的一种:http://www.xxx.com/index.php/模块/控制器/方法
    pathinfo 模式 需要 php.ini 开启下面这个参数
    cgi.fix_pathinfo=1
    apache服务器本身是支持pathinfo的,通过简单修改几项配置即可。当配置支持pathinfo后,在php应用程序中,通过_SERVER['PATH_INFO']变量获取pathinfo值为/topic/detail/tid/82.html。 我们就可以很容易通过php逻辑代码来解析出controller文件、action方法、以及剩余的动态参数,进而就可以返回正确的网页响应。
    但是我们要说的nginx服务器默认是不支持pathinfo模式访问。实质上就是nginx不会去设置环境变量PATH_INFO 的值,导致php应用程序不能通过_SERVER['PAHT_INFO']来获取path_info, 也就不能解析出对应的动态参数。
    nginx支持pathinfo的配置如下:
    1. 找到ngingx的配置文件nginx.conf
    在server里的location项,
    修改前为:
    location ~ .php$ { #注:去掉本行的$ 字符            
        root           html;            
        fastcgi_pass   127.0.0.1:9000;            
        fastcgi_index  index.php;            
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            
        include        fastcgi_params;            
        #注:下面加上一些配置语句  
    }  
    修改后为:
    location ~ .php {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;#这里可以新建一个文件include fcgi.conf;(fastcgi_paramsi.conf;??)专门保存fastcgi_param参数和值
        #定义变量 $path_info ,用于存放pathinfo信息
        set $path_info "";
        #定义变量 $real_script_name,用于存放真实地址
        set $real_script_name $fastcgi_script_name;
        #如果地址与引号内的正则表达式匹配            
        if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
            #将文件地址赋值给变量 $real_script_name 
            set $real_script_name $1;
            #将文件地址后的参数赋值给变量 $path_info
            set $path_info $2;
        } 
        #配置fastcgi的一些参数 
        fastcgi_param SCRIPT_NAME $real_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;
        # PHP only, required if PHP was built with --enable-force-cgi-redirect
        fastcgi_param  REDIRECT_STATUS    200;    
    }
    2.重启nginx和phpcgi
    其他参考:
    thinkphp 框架比较好了支持了pathinfo模式访问,可以去深入了解一下它是怎么支持pathinfo格式的。
    配置2参考
    典型默认配置
    location ~ .php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $DOCUMENT_ROOT$fastcgi_script_name;
        include        fastcgi_params;
    }
    修改后的配置 
    修改第1,6行,支持pathinfo
    location ~ .php(.*)$ { # 正则匹配.php后的pathinfo部分($是引用参数 数字是第1~n个参数)
        root html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $DOCUMENT_ROOT$fastcgi_script_name;
        fastcgi_param PATH_INFO $1; # 把pathinfo部分赋给PATH_INFO变量
        include        fastcgi_params;
    }
    配置3参考
    典型默认配置
    location / {
        #访问路径,可相对也可绝对路径
        root   html;
        #首页文件。以下按顺序匹配
        index  index.html index.htm;
    }
    修改后的配置 
    location / {
        #访问路径,可相对也可绝对路径
        root   html;
        #首页文件。以下按顺序匹配
        index  index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^/index.php(.*)$ /index.php?s=$1 last;
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
    } pathinfo模式有什么用?如何开启?
    皓玉源码网,一个优质的源码资源平台!
    皓玉源码网 » pathinfo模式有什么用?如何开启?