Nginx Web服務應用中URL地址重寫——Nginx rewrite

什麼是Nginx rewrite

和Apache等Web服務軟體一樣,Nginx rewrite的主要功能也是實現URL地址重寫。Nginx的rewrite規則需要PCRE軟體的支持,即通過Perl兼容正則表達式語法進行規則匹配。前文在安裝Nginx軟體時就已經安裝了這個PCRE軟體,同時也讓Nginx支持了rewrite的功能,默認參數編譯時,Nginx就會安裝支持rewrite的模塊,但是,也必須要有PCRE軟體的支持。

Nginx rewrite語法

1.rewrite指令語法

指令語法:rewrite regex replacement [flag];

默認值:none

應用位置:server、location、if

Advertisements

rewrite是實現URL重寫的關鍵指令,根據regex(正則表達式)部分的內容,重定向到replacement部分,結尾是flag標記。下面是一個簡單的URL rewrite跳轉的例子:

rewrite ^/(.*) http://www.etiantian.org/$1 permanent;

在上述指令中,rewrite為固定關鍵字,表示開啟一條rewrite匹配規則,regex部分是/(.*),這是一個正則表達式,表示匹配所有,匹配成功后跳轉到http://www.etiantian.org/$1。這裡的$1是取前面regex部分括弧里的內容,結尾的permanent;是永久301重定向標記,即跳轉到後面的http://www.etiantian.org/$1地址上。

Advertisements

2.regex常用正則表達式說明

3.rewrite指令結尾的flag標記說明

rewrite指令的最後一項參數為flag標記.

在以上的flag標記中,last和break用來實現URL重寫,瀏覽器地址欄的URL地址不變,但在伺服器端訪問的程序及路徑發生了變化。redirect和permanent用來實現URL跳轉,瀏覽器地址欄會顯示跳轉后的URL地址。

last和break標記的實現功能類似,但二者之間有細微的差別,使用alias指令時必須用last標記,使用proxy_pass指令時要使用break標記。last標記在本條rewrite規則執行完畢后,會對其所在的server{………}標籤重新發起請求,而break標記則會在本條規則匹配完成後,終止匹配,不再匹配後面的規則。

Nginx rewrite的企業應用場景

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

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

  • 為了讓搜索引擎收錄網站內容,並讓用戶體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。

  • 網站換新域名后,讓舊域名的訪問跳轉到新的域名上,例如:讓京東的360buy換成了jd.com。

  • 根據特殊變數、目錄、客戶端的信息進行URL跳轉等。

Nginx rewrite 301跳轉

以往我們是通過別名的方式實現haiyuancloud.cn和www.haiyuancloud.cn訪問同一個地址的,事實上,除了這個方式以外,還可以使用Nginx rewrite 301跳轉的方式來實現。

實現的配置文件如下:

[root@private conf]# cat extra/www.conf

server {

listen 80;

server_name haiyuancloud.cn;

rewrite ^/(.*) http://www.haiyuancloud.cn/$1 permanent;

location / {

root html/www;

index index.html index.htm;

}

error_page 404 /404.html;

location = /404.html {

root html/blog;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html/blog;

}

access_log logs/access_blog.log main;

}

配置后,在瀏覽器輸入:haiyuancloud.cn,運行后瀏覽器會變成:www.haiyuancloud.cn

Advertisements

你可能會喜歡