<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
指令語法:rewrite regex replacement[flag]
預設值:none
應用位置:server、location、if
regex是PCRE 風格的,如果regex匹配URI,那麼URI就會被替換成replacement,replacement 就是新的URI。如果rewrite同一個上下文中有多個這樣的正則,匹配會依照rewrite指令出現的順序先後依次進行下去,匹配到一個之後並不會終止,而是繼續往下匹配,直到返回最後一個匹配上的為止。如果想要中止繼續往下匹配,可以使用第三個引數flag。
如果新URI字元中有關於協定的任何東西,比如http://或者https://等,進一步的處理就終止了,直接返回使用者端302。
如果返回的是30x,那麼瀏覽器根據這個狀態碼和Location響應頭再發起一次請求,然後才能得到想要的響應結果。但是,如果不是返回30x狀態碼,那麼跳轉就是內部的,瀏覽器不做跳轉就能得到相應。
rewrite是實現URL重定向的重要指令,他根據regex(正規表示式)來匹配內容跳轉到replacement,結尾是flag標記
範例:
rewrite ^/(.*) http://www.baidu.com/ permanent; # 匹配成功後跳轉到百度,執行永久301跳轉
常用正規表示式:
字元 | 描述 |
---|---|
將後面接著的字元標記為一個特殊字元或者一個原義字元或一個向後參照 | |
^ | 匹配輸入字串的起始位置 |
$ | 匹配輸入字串的結束位置 |
* | 匹配前面的字元零次或多次 |
+ | 匹配前面的字元一次或多次 |
? | 匹配前面的字元零次或一次 |
. | 匹配除“n”之外的所有單個字元 |
(pattern) | 匹配括號內的pattern |
rewrite的最後一項引數
標記符號 | 說明 |
---|---|
last | 本條規則匹配完成後繼續向下匹配新的location URL 規則 |
break | 本條規則匹配完成後終止,不在匹配任何規則 |
redirect | 返回302臨時重定向 |
parmanent | 返回301永久重定向 |
rewrite模組的指令有break, if, return, rewrite, set等。rewrite指令所執行的順序如下:
首先在server上下文中依照順序執行rewrite模組指令;如果server中進行了rewrite重新,那麼以新的URL發起內部跳轉,直接匹配location,不會再執行server中的rewrite指令,然後
- 新URL直接匹配location
- 如果匹配上某個location,那麼其中的rewrite模組指令同樣依照順序執行。
- 如果再次導致URL的rewrite,那麼再一次進行內部跳轉去匹配location,但跳轉的總次數不能超過10次。
如果有last引數,那麼停止處理任何rewrite相關的指令,立即用替換後的新URI開始下一輪的location匹配。
如果在location的rewrite也使用last,便會再次以新的URI重新發起內部重定向,再次進行location匹配,而新的URI中極有可能和舊的URI一樣再次匹配到相同location中,這樣死迴圈發生了。當迴圈到第10次時,Nginx會終止這樣無意義的迴圈,並返回500錯誤。這點需要特別的注意。
停止處理任何rewrite的相關指令,就如同break 指令本身一樣。
last的break的相同點在於,立即停止執行所有當前上下文的rewrite模組指令;不同點在於last引數接著用新的URI馬上搜尋新的location,而break不會搜尋新的location,直接用這個新的URI來處理請求,這樣能避免重複rewite。因此,在server上下文中使用last,而在location上下文中使用break。
replacement 如果不包含協定,仍然是一個新的的URI,那麼就用新的URI匹配的location去處理請求,不會返回30x跳轉。但是redirect引數可以讓這種情況也返回30x(預設302)狀態碼,就像新的URI包含http://和https://等一樣。這樣的話,瀏覽器看到302,就會再發起一次請求,真正返回響應結果的就是這第二個請求。
和redirect引數一樣,只不過直接返回301永久重定向
雖說URI有了新的,但是要拼接成完整的URL還需要當前請求的scheme,以及由server_name_in_redirect和port_in_redirect指令決定的HOST和PORT.
還有一個比較有意思的應用,就是如果replacement中包含請求引數,那麼預設情況下舊URI中的請求引數也會拼接在replacement後面作為新的URI,如果不想這麼做,可以在replacement的最後面加上?。
舉例說明:
rewrite ^/users/(.*)$ /show?user=$1? last;
這樣的新URI還是 /show?user=xxx
但如果不加問號:
rewrite ^/users/(.*)$ /show?user=$1 last;
得到的新URI就是/show?user=$1&xxx=xxx。其中xxx=xxx是舊URI所帶的請求引數。
server { # 存取 /last.html 的時候,頁面內容重寫到 /index.html 中,並繼續後面的location匹配,瀏覽器位址列URL地址不變 rewrite /last.html /index.html last; # 存取 /break.html 的時候,頁面內容重寫到 /index.html 中,並停止後續的匹配,瀏覽器位址列URL地址不變; rewrite /break.html /index.html break; # 存取 /redirect.html 的時候,頁面直接302定向到 /index.html中,瀏覽器地址URL跳為index.html rewrite /redirect.html /index.html redirect; # 存取 /permanent.html 的時候,頁面直接301定向到 /index.html中,瀏覽器地址URL跳為index.html rewrite /permanent.html /index.html permanent; # 把 /html/*.html => /post/*.html ,301定向 rewrite ^/html/(.+?).html$ /post/$1.html permanent; # 把 /search/key => /search.html?keyword=key rewrite ^/search/([^/]+?)(/|$) /search.html?keyword=$1 permanent; # 把當前域名的請求,跳轉到新域名上,域名變化但路徑不變 rewrite ^/(.*) http://www.jd.com/$1 permanent; }
到此這篇關於Nginx中rewrite(地址重定向)的文章就介紹到這了,更多相關Nginx rewrite地址重定向內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45