Nginx URL重寫rewrite機(jī)制原理及使用實(shí)例
URL重寫有利于網(wǎng)站首選域的確定,對(duì)于同一資源頁(yè)面多條路徑的301重定向有助于URL權(quán)重的集中
Nginx URL重寫(rewrite)介紹
和apache等web服務(wù)軟件一樣,rewrite的組要功能是實(shí)現(xiàn)RUL地址的重定向。Nginx的rewrite功能需要PCRE軟件的支持,即通過(guò)perl兼容正則表達(dá)式語(yǔ)句進(jìn)行規(guī)則匹配的。默認(rèn)參數(shù)編譯nginx就會(huì)支持rewrite的模塊,但是也必須要PCRE的支持
rewrite是實(shí)現(xiàn)URL重寫的關(guān)鍵指令,根據(jù)regex(正則表達(dá)式)部分內(nèi)容,重定向到replacement,結(jié)尾是flag標(biāo)記。
rewrite語(yǔ)法格式及參數(shù)語(yǔ)法說(shuō)明如下:
rewrite <regex> <replacement> [flag];
關(guān)鍵字 正則 替代內(nèi)容 flag標(biāo)記
關(guān)鍵字:其中關(guān)鍵字error_log不能改變
正則:perl兼容正則表達(dá)式語(yǔ)句進(jìn)行規(guī)則匹配
替代內(nèi)容:將正則匹配的內(nèi)容替換成replacement
flag標(biāo)記:rewrite支持的flag標(biāo)記
flag標(biāo)記說(shuō)明:
- last #本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location URI規(guī)則
- break #本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則
- redirect #返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址
- permanent #返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址
rewrite參數(shù)的標(biāo)簽段位置:
server,location,if
例子:
rewrite ^/(.*) http://www.czlun.com/$1 permanent;
說(shuō)明:
- rewrite為固定關(guān)鍵字,表示開始進(jìn)行rewrite匹配規(guī)則
- regex部分是 ^/(.*) ,這是一個(gè)正則表達(dá)式,匹配完整的域名和后面的路徑地址
- replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的內(nèi)容。匹配成功后跳轉(zhuǎn)到的URL。
- flag部分 permanent表示永久301重定向標(biāo)記,即跳轉(zhuǎn)到新的 http://www.czlun.com/$1 地址上
regex 常用正則表達(dá)式說(shuō)明
字符 |
描述 |
\ |
將后面接著的字符標(biāo)記為一個(gè)特殊字符或一個(gè)原義字符或一個(gè)向后引用。如“\n”匹配一個(gè)換行符,而“\$”則匹配“$” |
^ |
匹配輸入字符串的起始位置 |
$ |
匹配輸入字符串的結(jié)束位置 |
* |
匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” |
+ |
匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o” |
? |
匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}" |
. |
匹配除“\n”之外的任何單個(gè)字符,若要匹配包括“\n”在內(nèi)的任意字符,請(qǐng)使用諸如“[.\n]”之類的模式。 |
(pattern) |
匹配括號(hào)內(nèi)pattern并可以在后面獲取對(duì)應(yīng)的匹配,常用$0...$9屬性獲取小括號(hào)中的匹配內(nèi)容,要匹配圓括號(hào)字符需要\(Content\) |
rewrite 企業(yè)應(yīng)用場(chǎng)景
Nginx的rewrite功能在企業(yè)里應(yīng)用非常廣泛:
- u 可以調(diào)整用戶瀏覽的URL,看起來(lái)更規(guī)范,合乎開發(fā)及產(chǎn)品人員的需求。
- u 為了讓搜索引擎搜錄網(wǎng)站內(nèi)容及用戶體驗(yàn)更好,企業(yè)會(huì)將動(dòng)態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù)。
- u 網(wǎng)址換新域名后,讓舊的訪問(wèn)跳轉(zhuǎn)到新的域名上。例如,訪問(wèn)京東的360buy.com會(huì)跳轉(zhuǎn)到j(luò)d.com
- u 根據(jù)特殊變量、目錄、客戶端的信息進(jìn)行URL調(diào)整等
Nginx配置rewrite過(guò)程介紹
(1)創(chuàng)建rewrite語(yǔ)句
vi conf/vhost/www.abc.com.conf
#vi編輯虛擬主機(jī)配置文件
文件內(nèi)容
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)重啟服務(wù)
確認(rèn)無(wú)誤便可重啟,操作如下:
nginx -t
#結(jié)果顯示ok和success沒問(wèn)題便可重啟
nginx -s reload
(3)查看跳轉(zhuǎn)效果
打開瀏覽器訪問(wèn)abc.com
頁(yè)面打開后,URL地址欄的abc.com變成了www.abc.com說(shuō)明URL重寫成功。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
nginx使用ssl模塊配置支持HTTPS訪問(wèn)的方法
這篇文章主要介紹了nginx使用ssl模塊配置支持HTTPS訪問(wèn)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Nginx訪問(wèn)控制與參數(shù)調(diào)優(yōu)的方法
這篇文章主要介紹了Nginx訪問(wèn)控制與參數(shù)調(diào)優(yōu)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03Nginx反向代理實(shí)現(xiàn)支持長(zhǎng)連接詳解
這篇文章主要給大家介紹了關(guān)于Nginx反向代理實(shí)現(xiàn)支持長(zhǎng)連接的相關(guān)資料,文字介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06Nginx-rtmp實(shí)現(xiàn)直播媒體實(shí)時(shí)流效果
這篇文章主要介紹了Nginx-rtmp實(shí)現(xiàn)直播媒體實(shí)時(shí)流效果,文中給出了總體設(shè)計(jì)圖,為了整合平臺(tái),會(huì)自建RTMP流媒體服務(wù)器和使用云廠商SaaS的RTMP流媒體服務(wù),需要的朋友可以參考下2018-08-08nginx配置wss協(xié)議的實(shí)現(xiàn)
本文主要介紹了nginx配置wss協(xié)議的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03