如何讓nginx支持ThinkPHP框架(重點參考)


公司有一款即將上線的應用服務端是基於ThinkPHP寫的,本地測試無異常,上傳到外網服務器后無法連接。這可把我和我的小伙伴們嚇死了,怎么回事兒,本地測試都是對的呀!

我和我的小伙伴們開始找原因,換了一台服務器,上傳上去測試可行。這兩台服務器的區別在於,一台是LAMP,一台是LNMP。而出問題的就是那天LNMP。度娘后知道,nginx默認情況下不支pathinfo模式,從而不能支持ThinkPHP。

 

nginx不支持thinkphp的原因

ThinkPHP支持通過PATHINFO和URL rewrite的方式來提供友好的URL,只需要在配置文件中設置 'URL_MODEL' => 2 即可。在Apache下只需要開啟mod_rewrite模塊就可以正常訪問了,但是Nginx中默認是不支持PATHINFO的,所以nginx默認情況下是不支持thinkphp的。不過我們可以通過修改nginx的配置文件來讓其支持thinkphp。

讓nginx支持pathinfo,支持thinkphp

我們打開nginx的配置文件,如果是想某個站點支持,請打開對應站點的配置文件

我們注釋掉配置文件中那些被我圈出來的語句(location ~ \.php$ {……}這一段里面的),我們將對這部分進行重寫!

將重寫后的代碼添加進去。

添加的代碼如下:

.........................................

location / {        

    if (!-e $request_filename) {

        rewrite  ^/(.*)$  /index.php/$1  last;

                break;

        }

}

 

location ~ \.php {

    fastcgi_pass 127.0.0.1:9000;

    fastcgi_index index.php;

    include fcgi.conf;(改成fastcgi_params或fastcgi.conf)

    set $real_script_name $fastcgi_script_name;

    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {

        set $real_script_name $1;

        set $path_info $2;

    }

    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

    fastcgi_param SCRIPT_NAME $real_script_name;

    fastcgi_param PATH_INFO $path_info;

}

...................................

 

注意事項

一定要注釋到原來的location ~ \.php$ {……}這一段里面的代碼

不要漏掉{}

Nginx配置文件里 if 和后面的括號之間要有一個空格,不然會報unknown directive錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM