現在使用thinkphp框架程序的客戶特別多,很多使用了軍哥的lnmp生產環境,但是NGINX本身對thinkphp框架支持的不是特別好。

比如pathinfo就是比較常見的問題,所以我們整理下解決方法供大家解決。

忠告:用thinkphp的用戶還是建議使用IIS或者apche來運行網站,實在對nginx喜歡的不得了可以使用軍哥的lnmpa,這也是一個不錯的組合,1G以上的主機推薦使用,這樣thinkphp就不是問題了。

打開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配置成功了^_^

 

另一種快速的方法:

在支付寶回調,和微信回調方法中。正常不支持參數中帶 ?s= ,所以要開啟THINKPHP 的PATHINFO模式 。

THINKPHP 官方論壇 和網絡上很多NGINX配置教程不是太完善的。

我一直比較喜歡使用lnmp.org配置服務器環境。

 

所以本文將介紹 LNMP 配置NGINX 支持THINKPHP  PATHINFO模式 。

方法很簡單 。

1,修改PHP.INI 支持 PHPINOF

PHP配置文件:/usr/local/php/etc/php.ini

更改php.ini
找到:cgi.fix_pathinfo=0
更改為:cgi.fix_pathinfo=1

2.修改nginx對應配置文件

/usr/local/nginx/conf/vhost/你的域名配置文件

去掉include pathinfo的#,在try_files前加#;


3.重啟lnmp即可。

lnmp restart

以上兩種方法都可以解決nginx下對thinkphp的pathinfo的支持。