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

相關文章
相關標籤/搜索