Nginx 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地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM