1. 程式人生 > >Nginx的pathinfo模式與URL重寫

Nginx的pathinfo模式與URL重寫

幾乎所有的框架(ThinkPHP,Zend Framework,CI,Yii,laravel等)都會使用URL重寫或者pathinfo模式,使URL看起來更美觀,比如可以隱藏掉入口檔案,並且有利於搜尋引擎優化,其實讓Nginx支援pathinfo或者重寫也不難,首先在php.ini中設定cgi.fix_pathinfo=1

再就是新增配置檔案(新版nginx) 內容如下:

#pathinfo 支援開始  以上配置資訊根據實際情況配置
  fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;    
  fastcgi_param PATH_INFO
$fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; #pathinfo 支援結束

對於URL重寫也比較簡單,上面的配置中也已經提到 例如對於THINKPHP可以這樣設定

location / {   
                       if (!-e $request_filename){   
                            #rewrite ^(.*)$ /index.php?s=/$1 last;
                            rewrite ^
(.*)$ /index.php/$1 last; } }

可能很多童鞋看到以上配置仍然不知道在哪新增這幾行配置,下面看一個完成的配置

server
    {
        listen 80 ;
        server_name _;
        index index.html index.htm index.php;
        root  /home/wwwroot/default;
        #匹配php指令碼副檔名
        location ~ [^/]\.php(/|$)
        {
            fastcgi_pass  unix:
/tmp/php-cgi.sock; fastcgi_index index.php; #fastcgi相關引數開始 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REDIRECT_STATUS 200; fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; #fastcgi相關引數結束 #pathinfo開始 fastcgi_split_path_info ^(.+?\.php)(/.*)$; set $path_info $fastcgi_path_info; fastcgi_param PATH_INFO $path_info; try_files $fastcgi_script_name =404; #pathinfo結束 } #重寫模式開始 location / { if (!-e $request_filename){ #rewrite ^(.*)$ /index.php?s=/$1 last; rewrite ^(.*)$ /index.php/$1 last; } } #重寫模式結束 }

這樣Nginx就支援pathinfo了,當然您需要根據您的伺服器進行具體的配置,可能會略有變化,切忌機械的照搬照抄。


轉自黎明互聯: Nginx相容框架的pathinfo模式與URL重寫.