Nginx rewrite規則

Rewrite規則也稱爲規則重寫,主要功能是實現瀏覽器訪問HTTP URL的跳轉,其正則表達式基於perl語言。重要用途以下php

a、對搜索引擎優化(Search Engine Optimization,SEO)友好,利於搜索引擎抓取網址頁面;html

b、隱藏網址的URL真實地址,瀏覽器顯示更加完美;nginx

c、網站變動升級,能夠基於Rewrite臨時重定向到其餘頁面;正則表達式

Nginx Rewrite 規則使用中有三個概念,分別是:Rewrite結尾標識符、Rewrite規則經常使用表達式、Nginx Rewrite變量,以下爲詳解瀏覽器

(1) Nginx Rewrite 結尾標識符,用於Rewrite規則末尾,標識規則的執行屬性緩存

last :至關於Apache裏的(L)標記,表示完成rewrite匹配;
break:本條規則匹配完成後,終止匹配,再也不匹配後面的規則。  
redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。 
permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址。  
其中last和break用來實現URL重寫時,瀏覽器地址欄URL地址不變。

(2)Nginx Rewrite 規則經常使用表達式,主要用於匹配參數、字符串及過濾設置。服務器

.           匹配任何單字符;
[0-9]     匹配字符串:0-9;
[^0-9]   不匹配字符串:0-9;
nihao|nisdni  可選擇的字符串;
?           匹配0到1個字符;
*            匹配0到多個字符;
+            匹配1到多個字符;
^            字符串開始標誌;
$             字符串結束標誌;
\n           轉義標識符;

(3)Nginx Rewrite 變量,經常使用於匹配HTTP請求頭信息、瀏覽器主機名、URL等。iphone

HTTP headers:HTTP_USERHTTP_AGENT,HTTP_REFERRER,HTTP_COOKIE,HTTP_HOST,HTTP_ACCEPT;
connection&request:REMOTE_ADDR,QUERY_STRING;
server internals:DOCUMENT_ROOT,SERVER_PORT,SERVER_PROTOCOL;
system stuff;TIME_YEAR,TIME_MON,TIME_DAY;
HTTP_USER_AGENT             用戶使用的代理,例如瀏覽器;
HTTP_REFERER                告知服務器,從哪一個頁面來訪問的;
HTTP_COOKIE                客戶端緩存,主要用於存儲用戶名和密碼等信息;
HTTP_HOST                    匹配服務器ServerName域名;
HTTP_ACCEPT                客戶端的瀏覽器支持的MIME類型;    
REMOTE_ADDR                客戶端的IP地址
QUERY_STRING                URL中訪問的字符串;
DOCUMENT_ROOT            服務器發佈目錄;
SERVER_PORT                服務器端口;
SERVER_PROTOCOL            服務器端協議;
TIME_YEAR                    年;
TIME_MON                    月;
TIME_DAY                    日

(4) Nginx Rewrite 如下配置均配置在nginx.conf或者vhosts.conf中;優化

1.將hello.net 跳轉至www.hello.net
if ( $host='hell.net' ) {
            rewrite ^/(.*)$ http://www.hello.net/$1 permanent;
}
2.訪問www.hello.net 跳轉www.baidu.com/new.index.html.
rewrite ^/$ http://www.baidu.com/new.index.html permanent;
3.訪問/hello/test/跳轉至/newindex.html,瀏覽器地址不變。
rewrite ^/hello/test/$  /newindex.html  last;
4.多域名跳轉到www.baidu.com.
if($host='www.baidu.com'){
rewrite ^/(.*)$ http://www.baidu.com/$1 permanent;
}
5.訪問文件和目錄不存在跳轉至index.php
if ( !-e $request_filename ) {
 rewrite ^/(.*)$ /index.php last;
}
6.目錄對換/xxx/1234  /xxx?id=1234
rewrite ^/(.+)(\d+) $1?id=$2 last;
7.判斷瀏覽器User Agent跳轉。
if ( $http_user_agent ~ MSIE ) {
rewrite ^/(.*)$/ie/$1 break;
}
8.禁止訪問以.sh,.flv,.mp3爲文件後綴名的文件。
location ~ .*\.(sh|flv|mp3)$ {
return  403;
}
9.將移動用戶訪問跳轉至移動端。
if ( $http_user_agent ~* "(Android)|(iphone)|(Mobile)|(WAP)|(UCWEB)") {
rewrite ^/$ http://m.baidu.com/ permanent;
}
10.匹配URL訪問字符串跳轉。
if ( $args~*tid=13 ) {
return 404;
}
11.訪問/10690/hello/546 跳轉至/index.php?tid/10690/items=123,[0-9]表示任意一個數字,+表示多個,(.+)表示任意多個字符。
rewrite ^/([0-9]+)/hello/(.+)$ /index.php?tid/$1/items=$2 last;
相關文章
相關標籤/搜索