最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、rewrite語法

指令語法:rewrite regex replacement[flag]

默認值:none

應用位置:server、location、if

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

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

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

rewrite是實現URL重定向的重要指令,他根據regex(正則表達式)來匹配內容跳轉到replacement,結尾是flag標記

示例:

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

常用正則表達式:

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

rewrite的最后一項參數

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

二、應用場景

  • 調整用戶瀏覽的URL,看起來規(guī)范
  • 為了讓搜索引擎收錄網站內容,讓用戶體驗更好
  • 網站更換新域名后
  • 根據特殊的變量、目錄、客戶端進行跳轉

三、rewrite指定工作原理

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

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

- 新URL直接匹配location

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

- 如果再次導致URL的rewrite,那么再一次進行內部跳轉去匹配location,但跳轉的總次數不能超過10次。

四、flag 參數簡介

1、last

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

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

2、break

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

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

3、redirect

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

4、parmanent

和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 中,并繼續(xù)后面的location匹配,瀏覽器地址欄URL地址不變
  rewrite /last.html /index.html last;

  # 訪問 /break.html 的時候,頁面內容重寫到 /index.html 中,并停止后續(xù)的匹配,瀏覽器地址欄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地址重定向內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于nginx實現上游服務器動態(tài)自動上下線無需reload的實現方法

    基于nginx實現上游服務器動態(tài)自動上下線無需reload的實現方法

    這篇文章主要介紹了基于nginx實現上游服務器動態(tài)自動上下線無需reload,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • angular6+springboot實現前后分離nginx配置

    angular6+springboot實現前后分離nginx配置

    這篇文章主要介紹了angular6+springboot實現前后分離nginx配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • nginx下部署vue項目的方法步驟

    nginx下部署vue項目的方法步驟

    這篇文章主要介紹了nginx下部署vue項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Nginx 上傳大文件超時解決辦法

    Nginx 上傳大文件超時解決辦法

    這篇文章主要介紹了Nginx 上傳大文件超時解決辦法的相關資料,這里上傳文件并設置nginx的配置文件防止超時的情況,需要的朋友可以參考下
    2017-07-07
  • Nginx常見的錯誤配置舉例

    Nginx常見的錯誤配置舉例

    這篇文章主要介紹了Nginx常見的錯誤配置舉例,幫助大家更好的理解和學習使用Nginx,感興趣的朋友可以了解下
    2021-03-03
  • nginx屏蔽指定接口(URL)的操作方式

    nginx屏蔽指定接口(URL)的操作方式

    這篇文章主要介紹了nginx屏蔽指定接口(URL)的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • nginx反向代理下的長連接實現

    nginx反向代理下的長連接實現

    本文主要介紹了Nginx反向代理下的長連接實現,包括客戶端到Nginx和Nginx到后端服務器之間的長連接設置,具有一定的參考價值,感興趣的可以了解一下
    2024-11-11
  • 使用Nginx?+?Keepalived?實現高可用?Web?負載均衡筆記(虛擬機)

    使用Nginx?+?Keepalived?實現高可用?Web?負載均衡筆記(虛擬機)

    這篇文章主要介紹了使用Nginx?+?Keepalived?實現高可用?Web?負載均衡筆記,需要的朋友可以參考下
    2023-08-08
  • Nginx中配置HTTP/2協(xié)議的詳細指南

    Nginx中配置HTTP/2協(xié)議的詳細指南

    HTTP/2 是 HTTP 協(xié)議的下一代版本,旨在提高性能、減少延遲并優(yōu)化現代網絡環(huán)境中的通信效率,本文將為大家介紹Nginx配置HTTP/2協(xié)議想詳細步驟,需要的可以參考下
    2025-04-04
  • nginx源碼分析線程池詳解

    nginx源碼分析線程池詳解

    這篇文章主要介紹了nginx源碼分析線程池詳解的相關資料,需要的朋友可以參考下
    2017-05-05

最新評論

鄂州市| 太湖县| 卢湾区| 津南区| 封开县| 抚顺市| 临湘市| 页游| 安远县| 托克托县| 丰原市| 德保县| 汉沽区| 蒙阴县| 莱西市| 海丰县| 独山县| 志丹县| 明水县| 云梦县| 西城区| 四平市| 通城县| 盐池县| 介休市| 故城县| 太保市| 安西县| 曲水县| 莎车县| 元阳县| 万宁市| 滨海县| 长宁区| 台东县| 焉耆| 阳江市| 怀化市| 仙游县| 牡丹江市| 临潭县|