nginx的pathinfo配置

前言:

        首先,什么是pathinfo模式呢?php

        pathinfo是伪静态的一种,咱们先解释一下伪静态的概念,伪静态页面是静态URL与动态URL互通的一个桥梁,它是指动态网址经过URL重写的手段去掉其动态参数,使URL静态化,但在实际的网页目录中并无重写URL。简单来讲,伪静态URL就是经过服务器转换假装文件名或地址,使该页面相似于静态页面,但服务器上没有独立存在的文件,其本质仍是动态页面。html

       例如:一个动态网址http://www.cxzaixian.com/index.php?m=topic&a=detail&tid=82  转为 伪静态模式后为http://www.cxzaixian.com/index.php/topic/detail/tid/82.html。 nginx

       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, 也就不能解析出对应的动态参数。shell

       好了,终于到本文的正题了,nginx支持pathinfo的配置以下:    apache

1、修改ngingx的配置文件nginx.conf


在server里的location项:服务器

修改前:spa

#注:去掉下行的$ 字符
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;
    #注:下面加上一些配置语句
}

修改后:code

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;
    #定义变量 $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;
}

2、重启nginx和phpcgi

相关文章
相关标签/搜索