Nginx的pathinfo模式與URL重寫
阿新 • • 發佈:2018-12-28
幾乎所有的框架(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重寫.