什麼是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
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地址上。
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
閱讀更多 海淵haiyuan 的文章