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

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

我和個人小夥伴們開始找緣由,換了一臺服務器,上傳上去測試可行。這兩臺服務器的區別在於,一臺是LAMP,一臺是LNMP。而出問題的就是那天LNMP。度娘後知道,nginx默認狀況下不支pathinfo模式,從而不能支持ThinkPHP。html

 

nginx不支持thinkphp的緣由nginx

ThinkPHP支持經過PATHINFO和URL rewrite的方式來提供友好的URL,只須要在配置文件中設置 'URL_MODEL' => 2 便可。在Apache下只須要開啓mod_rewrite模塊就能夠正常訪問了,可是Nginx中默認是不支持PATHINFO的,因此nginx默認狀況下是不支持thinkphp的。不過咱們能夠經過修改nginx的配置文件來讓其支持thinkphp。thinkphp

讓nginx支持pathinfo,支持thinkphp服務器

咱們打開nginx的配置文件,若是是想某個站點支持,請打開對應站點的配置文件測試

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

將重寫後的代碼添加進去。htm

添加的代碼以下:ip

.........................................ci

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錯誤。

相關文章
相關標籤/搜索