1. 程式人生 > >Nginx URL重寫(rewrite)配置及資訊詳解

Nginx URL重寫(rewrite)配置及資訊詳解

Nginx URL重寫(rewrite)配置及資訊詳解

    URL重寫有利於網站首選域的確定,對於同一資源頁面多條路徑的301重定向有助於URL權重的集中

Nginx URL重寫(rewrite)介紹

    和apache等web服務軟體一樣,rewrite的組要功能是實現RUL地址的重定向。Nginx的rewrite功能需要PCRE軟體的支援,即通過perl相容正則表示式語句進行規則匹配的。預設引數編譯nginx就會支援rewrite的模組,但是也必須要PCRE的支援

    rewrite是實現URL重寫的關鍵指令,根據regex(正則表示式)部分內容,重定向到replacement,結尾是flag標記。

rewrite語法格式及引數語法說明如下:

    rewrite    <regex>    <replacement>    [flag];

    關鍵字      正則        替代內容          flag標記

 

    關鍵字:其中關鍵字error_log不能改變

    正則:perl相容正則表示式語句進行規則匹配

    替代內容:將正則匹配的內容替換成replacement

    flag標記:rewrite支援的flag標記

 

flag標記說明:

last  #本條規則匹配完成後,繼續向下匹配新的location URI規則

break  #本條規則匹配完成即終止,不再匹配後面的任何規則

redirect  #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址

permanent  #返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址

rewrite引數的標籤段位置:

server,location,if

例子:

rewrite ^/(.*) http://www.czlun.com/$1 permanent;

說明:                                        

rewrite為固定關鍵字,表示開始進行rewrite匹配規則

regex部分是 ^/(.*) ,這是一個正則表示式,匹配完整的域名和後面的路徑地址

replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()裡的內容。匹配成功後跳轉到的URL。

flag部分 permanent表示永久301重定向標記,即跳轉到新的 http://www.czlun.com/$1 地址上

regex 常用正則表示式說明

字元

描述

\

將後面接著的字元標記為一個特殊字元或一個原義字元或一個向後引用。如“\n”匹配一個換行符,而“\$”則匹配“$”

^

匹配輸入字串的起始位置

$

匹配輸入字串的結束位置

*

匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+

匹配前面的字元一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”

?

匹配前面的字元零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效於"{0,1}"

.

匹配除“\n”之外的任何單個字元,若要匹配包括“\n”在內的任意字元,請使用諸如“[.\n]”之類的模式。

(pattern)

匹配括號內pattern並可以在後面獲取對應的匹配,常用$0...$9屬性獲取小括號中的匹配內容,要匹配圓括號字元需要\(Content\)

rewrite 企業應用場景

Nginx的rewrite功能在企業裡應用非常廣泛:

u 可以調整使用者瀏覽的URL,看起來更規範,合乎開發及產品人員的需求。

u 為了讓搜尋引擎搜錄網站內容及使用者體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。

u 網址換新域名後,讓舊的訪問跳轉到新的域名上。例如,訪問京東的360buy.com會跳轉到jd.com

u 根據特殊變數、目錄、客戶端的資訊進行URL調整等

Nginx配置rewrite過程介紹

(1)建立rewrite語句

vi conf/vhost/www.abc.com.conf

#vi編輯虛擬主機配置檔案

檔案內容

server {

        listen 80;

        server_name abc.com;

        rewrite ^/(.*) http://www.abc.com/$1 permanent;

}

 

 

server {

        listen 80;

        server_name www.abc.com;

        location / {

                root /data/www/www;

                index index.html index.htm;

        }

        error_log    logs/error_www.abc.com.log error;

        access_log    logs/access_www.abc.com.log    main;

}

或者

server {

        listen 80;

        server_name abc.com www.abc.com;

        if ( $host != 'www.abc.com'  ) {

                rewrite ^/(.*) http://www.abc.com/$1 permanent;

        }

        location / {

                root /data/www/www;

                index index.html index.htm;

        }

        error_log    logs/error_www.abc.com.log error;

        access_log    logs/access_www.abc.com.log    main;

}

(2)重啟服務

確認無誤便可重啟,操作如下:

nginx -t

#結果顯示ok和success沒問題便可重啟

nginx -s reload

(3)檢視跳轉效果

開啟瀏覽器訪問abc.com

頁面開啟後,URL位址列的abc.com變成了www.abc.com說