1.基礎知識點 (1)Rewirte規則也稱為 規則重寫,主要功能是實現瀏覽器訪問HTTP URL的跳轉,其正則表達式是基於Perl語言。 (2)對收縮引擎優化(SEO),利於收索引擎抓取網站頁面。 (3)隱藏網站URL真實地址。 (4)網站變更升級,可以基於Rewrite臨時重定向到其他頁面。 ( ...
1.基礎知識點
(1)Rewirte規則也稱為 規則重寫,主要功能是實現瀏覽器訪問HTTP URL的跳轉,其正則表達式是基於Perl語言。
(2)對收縮引擎優化(SEO),利於收索引擎抓取網站頁面。
(3)隱藏網站URL真實地址。
(4)網站變更升級,可以基於Rewrite臨時重定向到其他頁面。
(5)有利於伺服器實現偽靜態。
2.Rewrite結尾表示符
(1)last:相當於apache里的(L)標記,表示完成rewrite匹配。(瀏覽器地址欄URL地址不變)
(2)break:本條規則匹配完成後,終止匹配,不再匹配後面的規則。(瀏覽器地址欄URL地址不變)
(3)redirect:返回302臨時重定向,瀏覽器地址欄會顯示跳轉後的URL地址。
(4)permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址。
3.Rewrite規則常用表達式
(1) . 匹配任何單字元;
(2)? 匹配0到1個字元;只匹配一次;
(3)* 匹配0到多個字元;
(4)+ 匹配1到多個字元;
(5)[0-9] 匹配字元串0-9
(6)[^0-9] 不匹配字元串0-9
(7)^ 字元串開始標誌
(8)$ 字元串結束標誌
(9)\n 轉義換行標誌
4.Nginx Rewrite變數常用於匹配HTTP請求頭信息、瀏覽器主機名、URL等。
5.Rewrite配置在nginx的location塊中;
(1)將dks.net跳轉至www.dks.net
if($host='dks.net') { rewrite ^/(.*)$ http://www.dks.net/$1 permanent; }
# $host內置nginx變數,匹配用戶訪問的功能變數名稱
# $1表示引用第一個括弧的內容,是用戶輸入的內容;如果不使用$1引用,則只會匹配根(2)將訪問www.dks.net跳轉至www.test.com/new.index.html
rewrite ^/$ http://www.test.com/new.index.html permanent;(3)訪問 /dks/test01/跳轉至/newindex.html,瀏覽器地址不變
rewrite ^/dks/test01/$ /newindex.html last;
(4)多功能變數名稱跳轉 www.dks.net
if($host!='www.dks.net') { rewrite ^/(.*)$ http://www.dks.net/$1 permanert; }(5)訪問文件和目錄不存在跳轉至index.php
!-f 和 -f 判斷文件
!-d 和 -d 判斷目錄
!-e 和 -e 判斷文件和目錄
!-x 和 -x 判斷文件是否可執行
if(!-e $request filename) { rewrite ^/(.*) /index.php last; }(6)目錄對換 /xxx/123456——> /xxx?id=123456
\d+ 代表匹配數字,相當於[0-9]
rewrite ^/(.+)/(\d+) /$1?id=$2 last;(7)判斷瀏覽器User Agent跳轉
if($http_user_agent ~MSIE) { rewrite ^(.*)$/ie/$1 break; }(8)禁止訪問以.sh | .flv | .mps為文件尾碼的文件
location ~.*\.(sh|flv|mp3)$ { return 403; }(9)將移動用戶訪問跳動至移動端。
if($http_user_agent ~* "(Android)|(iphone)|(Mobile)|(WAP)|(UCWEB)") { rewrite ^/$ http://m.dks.net/ permanent; }(10)匹配URL訪問字元串跳轉
if($args ~* tid=13) { return 404; }(11)訪問/10690/dks/123 跳轉至/index.php?tid/10690/items=123
rewrite ^/([0-9]+)/dks/(.+)$ /index.php?tid/$1/items=$2 last;
6.多rewrite規則跳轉
rewrite ^/dks/(.*)/$ /newindex.html permanent; #可以跳轉 rewrite ^/newindex.html$ /dks/test01/index.html permanent;rewrite ^/dks/(.*)/$ /newindex.html break; #break 終止跳轉,執行下一條rewrite規則 rewrite ^/newindex.html$ /dks/test01/index.html permanent;rewrite ^/dks/(.*)/$ /newindex.html last; #last 跳轉,但下麵那條rewrite規則匹配不上,因為last使地址欄url地址不變,所以下麵的那條rewrite規則匹配不上; rewrite ^/newindex.html$ /dks/test01/index.html permanent; #此條規則匹配不上上邊的url地址