Nginx下實現pathinfo及ThinkPHP的URL Rewrite模式支持

http://www.thinkphp.cn/topic/3138.html


打開Nginx的配置文件 /usr/local/nginx/conf/nginx.conf 一般是在這個路徑,根據你的安裝路徑可能有所變化。如果你配置了vhost,而且只需要你這一個vhost支持pathinfo的話,可以直接打開你的vhost的配置文件。找到類似如下代碼(不同版本的nginx可能稍有不同,但是相差不會很遠)

    location ~ .*.(php|php5)?$
        {
                #原有代碼
        }


修改成以下代碼:


  

  #去掉$是爲了不匹配行末,即可以匹配.php/,以實現pathinfo
    #如果你不需要用到php5後綴,也可以將其去掉
    location ~ .php
        {
                #原有代碼
                
                #定義變量 $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_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
        }


這樣,nginx服務器就可以支持pathinfo了。但是如果要支持ThinkPHP的URL_MODE設置爲2的模式,還需要配置rewrite規則。找到access_log語句,在其上方加上以下語句:


 

   #如果請求既不是一個文件,也不是一個目錄,則執行一下重寫規則
    if (!-e $request_filename)
        {
            #地址作爲將參數rewrite到index.php上。
            rewrite ^/(.*)$ /index.php/$1;
            #若是子目錄則使用下面這句,將subdir改成目錄名稱即可。
            #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
        }



最後,保存配置文件,重啓nginx服務,把ThinkPHP的URL_MODEL設置爲2,訪問下你的頁面,如果能正常訪問,恭喜你pathinfo配置成功了^_^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章