天天看點

linux 重寫路由nginx,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            [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.linuxidc.com/$1 permanent;

說明:

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

regex部分是 ^/(.*) ,這是一個正規表達式,比對完整的域名和後面的路徑位址

replacement部分是http://www.linuxidc.com/$1 $1,是取自regex部分()裡的内容。比對成功後跳轉到的URL。

flag部分 permanent表示永久301重定向标記,即跳轉到新的 http://www.linuxidc.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.linuxidc.com.conf

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

檔案内容

server {

listen 80;

server_name linuxidc.com;

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

}

server {

listen 80;

server_name www.linuxidc.com;

location / {

root /data/www/www;

index index.html index.htm;

}

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

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

}

或者

server {

listen 80;

server_name linuxidc.com www.linuxidc.com;

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

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

}

location / {

root /data/www/www;

index index.html index.htm;

}

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

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

}

(2)重新開機服務

确認無誤便可重新開機,操作如下:

nginx -t

#結果顯示ok和success沒問題便可重新開機

nginx -s reload

(3)檢視跳轉效果

打開浏覽器通路linuxidc.com

頁面打開後,URL位址欄的linuxidc.com變成了www.linuxidc.com說明URL重寫成功。

下面關于Nginx的文章您也可能喜歡,不妨參考下:

Nginx 的詳細介紹:請點這裡

Nginx 的下載下傳位址:請點這裡

linux 重寫路由nginx,Nginx URL重寫(rewrite)配置及資訊詳解