ThinkPHP5配置Nginx實現兼容pathinfo模式訪問

ThinkPHP項目,當使用Apache服務器時,Apache服務器自己支持pathinfo模式,ThinkPHP的4種訪問模式都沒問題;當使用Nginx時,碰到問題,必須使用兼容模式訪問。
查找不少文檔,概括緣由及解決方案以下:php


緣由:低版本的Nginx不支持pathinfo模式;高版本的Nginx(大約0.7之後)支持,但默認沒有開啓。
解決解決方案:html


一、開啓Nginx的pathinfo模式:
    在站點配置文件中找到 location ~ \.php$ {...} 那部分,把那個 $ 符號刪除,而後在{}中添加如下代碼:linux

    fastcgi_split_path_info         ^(.+\.php)(.*)$;
    fastcgi_param  PATH_INFO        $fastcgi_path_info;    
    fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;

    保存,重啓。這時Nginx已經支持pathinfo,訪問www.xxx.com/index.php/admin/index/test查看結果
    注意:若是模板文件中使用了U()函數,fastcgi_split_path_info部分要替換爲服務器

    fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;

二、rewrite重寫,隱藏入口文件index.php
    在站點配置文件中找到 location / {...}這部分,在裏面添加如下代碼:函數

    # 專門針對tp的rewrite模式
    if (!-e $request_filename) {
        rewrite  ^(.*)$  /index.php?s=$1  last;
        break;
    }

    保存,重啓。這時Nginx完美支持pathinfo模式,訪問www.xxx.com/admin/index/test查看結果spa

 

PS:該篇從原理上講解Nginx對ThinkPHP的支持,上篇轉載的文章完美解決了ThinkPHP和Nginx的配置,不求理解的童鞋能夠採用拿來主義!).net

有關Nginx的CGI、Fastcgi、pathinfo原理的講解,參見這篇文章,做者講解得很是詳細,感謝分享!code

相關文章
相關標籤/搜索