欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx中rewrite(地址重定向)的深入剖析

 更新時(shí)間:2022年09月29日 10:36:41   作者:閣下何不踏風(fēng)起  
Rewrite主要實(shí)現(xiàn)url地址重寫,以及url地址跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Nginx中rewrite(地址重定向)的深入剖析,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、rewrite語法

指令語法:rewrite regex replacement[flag]

默認(rèn)值:none

應(yīng)用位置:server、location、if

regex是PCRE 風(fēng)格的,如果regex匹配URI,那么URI就會(huì)被替換成replacement,replacement 就是新的URI。如果rewrite同一個(gè)上下文中有多個(gè)這樣的正則,匹配會(huì)依照rewrite指令出現(xiàn)的順序先后依次進(jìn)行下去,匹配到一個(gè)之后并不會(huì)終止,而是繼續(xù)往下匹配,直到返回最后一個(gè)匹配上的為止。如果想要中止繼續(xù)往下匹配,可以使用第三個(gè)參數(shù)flag。

如果新URI字符中有關(guān)于協(xié)議的任何東西,比如http://或者h(yuǎn)ttps://等,進(jìn)一步的處理就終止了,直接返回客戶端302。

如果返回的是30x,那么瀏覽器根據(jù)這個(gè)狀態(tài)碼和Location響應(yīng)頭再發(fā)起一次請求,然后才能得到想要的響應(yīng)結(jié)果。但是,如果不是返回30x狀態(tài)碼,那么跳轉(zhuǎn)就是內(nèi)部的,瀏覽器不做跳轉(zhuǎn)就能得到相應(yīng)。

rewrite是實(shí)現(xiàn)URL重定向的重要指令,他根據(jù)regex(正則表達(dá)式)來匹配內(nèi)容跳轉(zhuǎn)到replacement,結(jié)尾是flag標(biāo)記

示例:

rewrite ^/(.*) http://www.baidu.com/ permanent;     # 匹配成功后跳轉(zhuǎn)到百度,執(zhí)行永久301跳轉(zhuǎn)

常用正則表達(dá)式:

字符描述
\將后面接著的字符標(biāo)記為一個(gè)特殊字符或者一個(gè)原義字符或一個(gè)向后引用
^匹配輸入字符串的起始位置
$匹配輸入字符串的結(jié)束位置
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
.匹配除“\n”之外的所有單個(gè)字符
(pattern)匹配括號(hào)內(nèi)的pattern

rewrite的最后一項(xiàng)參數(shù)

標(biāo)記符號(hào)說明
last本條規(guī)則匹配完成后繼續(xù)向下匹配新的location URL 規(guī)則
break本條規(guī)則匹配完成后終止,不在匹配任何規(guī)則
redirect返回302臨時(shí)重定向
parmanent返回301永久重定向

二、應(yīng)用場景

  • 調(diào)整用戶瀏覽的URL,看起來規(guī)范
  • 為了讓搜索引擎收錄網(wǎng)站內(nèi)容,讓用戶體驗(yàn)更好
  • 網(wǎng)站更換新域名后
  • 根據(jù)特殊的變量、目錄、客戶端進(jìn)行跳轉(zhuǎn)

三、rewrite指定工作原理

rewrite模塊的指令有break, if, return, rewrite, set等。rewrite指令所執(zhí)行的順序如下:

首先在server上下文中依照順序執(zhí)行rewrite模塊指令;如果server中進(jìn)行了rewrite重新,那么以新的URL發(fā)起內(nèi)部跳轉(zhuǎn),直接匹配location,不會(huì)再執(zhí)行server中的rewrite指令,然后

- 新URL直接匹配location

- 如果匹配上某個(gè)location,那么其中的rewrite模塊指令同樣依照順序執(zhí)行。

- 如果再次導(dǎo)致URL的rewrite,那么再一次進(jìn)行內(nèi)部跳轉(zhuǎn)去匹配location,但跳轉(zhuǎn)的總次數(shù)不能超過10次。

四、flag 參數(shù)簡介

1、last

如果有l(wèi)ast參數(shù),那么停止處理任何rewrite相關(guān)的指令,立即用替換后的新URI開始下一輪的location匹配。

如果在location的rewrite也使用last,便會(huì)再次以新的URI重新發(fā)起內(nèi)部重定向,再次進(jìn)行l(wèi)ocation匹配,而新的URI中極有可能和舊的URI一樣再次匹配到相同location中,這樣死循環(huán)發(fā)生了。當(dāng)循環(huán)到第10次時(shí),Nginx會(huì)終止這樣無意義的循環(huán),并返回500錯(cuò)誤。這點(diǎn)需要特別的注意。

2、break

停止處理任何rewrite的相關(guān)指令,就如同break 指令本身一樣。

last的break的相同點(diǎn)在于,立即停止執(zhí)行所有當(dāng)前上下文的rewrite模塊指令;不同點(diǎn)在于last參數(shù)接著用新的URI馬上搜尋新的location,而break不會(huì)搜尋新的location,直接用這個(gè)新的URI來處理請求,這樣能避免重復(fù)rewite。因此,在server上下文中使用last,而在location上下文中使用break。

3、redirect

replacement 如果不包含協(xié)議,仍然是一個(gè)新的的URI,那么就用新的URI匹配的location去處理請求,不會(huì)返回30x跳轉(zhuǎn)。但是redirect參數(shù)可以讓這種情況也返回30x(默認(rèn)302)狀態(tài)碼,就像新的URI包含http://和https://等一樣。這樣的話,瀏覽器看到302,就會(huì)再發(fā)起一次請求,真正返回響應(yīng)結(jié)果的就是這第二個(gè)請求。

4、parmanent

和redirect參數(shù)一樣,只不過直接返回301永久重定向

雖說URI有了新的,但是要拼接成完整的URL還需要當(dāng)前請求的scheme,以及由server_name_in_redirect和port_in_redirect指令決定的HOST和PORT.

還有一個(gè)比較有意思的應(yīng)用,就是如果replacement中包含請求參數(shù),那么默認(rèn)情況下舊URI中的請求參數(shù)也會(huì)拼接在replacement后面作為新的URI,如果不想這么做,可以在replacement的最后面加上?。

舉例說明:

rewrite ^/users/(.*)$ /show?user=$1? last;

這樣的新URI還是 /show?user=xxx

但如果不加問號(hào):

rewrite ^/users/(.*)$ /show?user=$1 last;

得到的新URI就是/show?user=$1&xxx=xxx。其中xxx=xxx是舊URI所帶的請求參數(shù)。

五、示例

server {
  # 訪問 /last.html 的時(shí)候,頁面內(nèi)容重寫到 /index.html 中,并繼續(xù)后面的location匹配,瀏覽器地址欄URL地址不變
  rewrite /last.html /index.html last;

  # 訪問 /break.html 的時(shí)候,頁面內(nèi)容重寫到 /index.html 中,并停止后續(xù)的匹配,瀏覽器地址欄URL地址不變;
  rewrite /break.html /index.html break;

  # 訪問 /redirect.html 的時(shí)候,頁面直接302定向到 /index.html中,瀏覽器地址URL跳為index.html
  rewrite /redirect.html /index.html redirect;

  # 訪問 /permanent.html 的時(shí)候,頁面直接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;
  
  # 把當(dāng)前域名的請求,跳轉(zhuǎn)到新域名上,域名變化但路徑不變
  rewrite ^/(.*) http://www.jd.com/$1 permanent;
  }

總結(jié)

到此這篇關(guān)于Nginx中rewrite(地址重定向)的文章就介紹到這了,更多相關(guān)Nginx rewrite地址重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān)的實(shí)現(xiàn)思路

    Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān)的實(shí)現(xiàn)思路

    這篇文章主要介紹了Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān),動(dòng)態(tài)網(wǎng)關(guān)即任何配置都實(shí)現(xiàn)不用重啟網(wǎng)關(guān)服務(wù)器都可以及時(shí)刷新,對Nginx gateway集群相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-10-10
  • Nginx配置React項(xiàng)目Url后直接輸入路由路徑時(shí)報(bào)404問題的解決

    Nginx配置React項(xiàng)目Url后直接輸入路由路徑時(shí)報(bào)404問題的解決

    這篇文章主要給大家介紹了關(guān)于Nginx配置React項(xiàng)目Url后面直接輸入路由路徑時(shí)報(bào)404問題的解決方法,文中通過示例代碼將解決的方法介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Nginx限流配置詳解

    Nginx限流配置詳解

    限流是服務(wù)降級的一種方式,通過限制系統(tǒng)的輸入和輸出流量以達(dá)到保護(hù)系統(tǒng)的目的,本文主要介紹了Nginx限流配置詳解,感興趣的可以了解一下
    2023-11-11
  • Nginx將http轉(zhuǎn)換成https的詳細(xì)過程

    Nginx將http轉(zhuǎn)換成https的詳細(xì)過程

    相信大家在現(xiàn)有項(xiàng)目里都會(huì)通過https訪問,這篇文章主要給大家介紹了關(guān)于Nginx將http轉(zhuǎn)換成https的詳細(xì)過程,文中將實(shí)現(xiàn)的方法介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Nginx解決history模式下頁面刷新404問題示例

    Nginx解決history模式下頁面刷新404問題示例

    這篇文章主要為大家介紹了Nginx解決history模式下頁面刷新404問題示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • nginx修改上傳文件大小限制的方法

    nginx修改上傳文件大小限制的方法

    本篇文章主要介紹了nginx修改上傳文件大小限制的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。
    2016-12-12
  • Nginx代理Redis哨兵主從配置的實(shí)現(xiàn)

    Nginx代理Redis哨兵主從配置的實(shí)現(xiàn)

    本文主要介紹了Nginx代理Redis哨兵主從配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè)

    nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè)

    在Nginx配置中,當(dāng)return和rewrite指令同時(shí)存在,其執(zhí)行順序取決于配置的具體場景,這篇文章主要介紹了nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • 如何利用nginx通過正則攔截指定url請求詳解

    如何利用nginx通過正則攔截指定url請求詳解

    這篇文章主要介紹了如何利用nginx通過正則攔截指定url請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Nginx下Frp強(qiáng)制重定向?yàn)閔ttps配置詳解

    Nginx下Frp強(qiáng)制重定向?yàn)閔ttps配置詳解

    這篇文章主要介紹了Nginx下Frp強(qiáng)制重定向?yàn)閔ttps配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04

最新評論