nginx中的正則表達式及location和rewrite

目錄

常用的Nginx 正則表達式

location和rewrite的區別

location

location 大致可以分為三類

location 常用的匹配規則

location 優先級

location 示例說明

location優先級的總結

rewrite

rewrite的功能

rewrite實現跳轉的條件

rewrite的執行順序

rewrite的語法格式

rewrite的示例


常用的Nginx 正則表達式

  • ^ :匹配輸入字符串的起始位置
  • $ :匹配輸入字符串的結束位置
  • * :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
  • + :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
  • ? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
  • . :匹配除“\n”之外的任何單個字符,若要匹配包括“\n”在內的任意字符,請使用諸如“[.\n]”之類的模式
  • \ :將后面接著的字符標記為一個特殊字符或一個原義字符或一個向后引用。如“\n”匹配一個換行符,而“\$”則匹配“$”
  • \d :匹配純數字[0-9] ? \s :空白符 ? ?\w :任意單詞字符包括下劃線[A-Za-z0-9_]
  • {n} :重復 n 次
  • {n,} :重復 n 次或更多次
  • {n,m} :重復 n 到 m 次
  • [] :定義匹配的字符范圍
  • [c] :匹配單個字符 c
  • [a-z] :匹配 a-z 小寫字母的任意一個
  • [a-zA-Z0-9] :匹配所有大小寫字母或數字
  • () :表達式的開始和結束位置
  • | :或運算符

location和rewrite的區別

從功能看 rewrite 和 location 似乎有點像,都能實現跳轉,主要區別在于 rewrite 是在同一域名內更改獲取資源的路徑,而 location 是對一類路徑做控制訪問或反向代理,還可以proxy_pass 到其他機器。

  • rewrite 對訪問的域名或者域名內的URL路徑地址重寫,重定向請求
  • location 對訪問的路徑做訪問控制或者代理轉發

location

location 大致可以分為三類

  • 精準匹配:location = / {...}
  • 一般匹配:location / {...}?
  • 正則匹配:location ~ / {...}

location 常用的匹配規則

  • = :進行普通字符精確匹配,也就是完全匹配。
  • ^~ :表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其它 正則匹配location。
  • ~ :區分大小寫的匹配。
  • ~* :不區分大小寫的匹配。
  • !~ :區分大小寫的匹配取非。
  • !~* :不區分大小寫的匹配取非。

location 優先級

  1. 首先精確匹配 =
  2. 其次前綴匹配 ^~
  3. 其次是按文件中順序的正則匹配 ~或~*
  4. 然后匹配不帶任何修飾符的一般前綴匹配
  5. 最后是交給 / 通用匹配

location 示例說明

(1)location = / {}
=為精確匹配 / ,主機名后面不能帶任何字符串,比如訪問 / 和 /data,則 / 匹配,/data 不匹配
再比如?location = /abc,則只匹配/abc ,/abc/或 /abcd不匹配。若?location??/abc,則即匹配/abc 、/abcd/ 同時也匹配 /abc/。

(2)location / {}
因為所有的地址都以 / 開頭,所以這條規則將匹配到所有請求 比如訪問 / 和 /data, 則 / 匹配, /data 也匹配,
但后面前綴路徑會和最長字符串優先匹配(最長匹配)

(3)location /documents/ {}
匹配任何以 /documents/ 開頭的地址,匹配符合以后,還要繼續往下搜索其它 location
只有其它 location后面的前綴路徑沒有匹配到時,才會采用這一條

(4)location /documents/abc {}
匹配任何以 /documents/abc 開頭的地址,匹配符合以后,還要繼續往下搜索其它 location
只有其它 location后面的前綴路徑沒有匹配到時,才會采用這一條

(5)location ^~ /images/ {}
匹配任何以 /images/ 開頭的地址,匹配符合以后,停止往下搜索正則,采用這一條

(6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 結尾的請求
然而,所有請求 /images/ 下的圖片會被 location ^~ /images/ 處理,因為 ^~ 的優先級更高,所以到達不了這一條正則

(7)location /images/abc {}
最長字符匹配到 /images/abc,優先級最低,繼續往下搜索其它 location,會發現 ^~ 和 ~ 存在

(8)location ~ /images/abc {}
匹配以/images/abc 開頭的,優先級次之,只有去掉 location ^~ /images/ 才會采用這一條

(9)location /images/abc/1.html {}
匹配/images/abc/1.html 文件,如果和正則location ~ /images/abc/1.html 相比,正則優先級更高

location優先級的總結

(location = 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分前綴路徑) > (location /)

  • 在沒有精準匹配的情況下,先看前綴匹配的長度,然后根據最長的前綴匹配的優先級去確定是否再去看其它正則匹配location,如果最長的前綴匹配帶有 ^~ 則不再看其它正則匹配location,如果最長的前綴匹配是沒有修飾符的一般匹配則會再看其它正則匹配location
  • 前綴匹配看長度,最長的優先匹配
  • 正則匹配看上下順序,由上往下依次匹配,當有匹配成功時候,停止匹配,按當前匹配規則處理請求
  • 只有在精準、前綴、正則、一般 都沒有匹配到的時候才會看通用匹配

rewrite

rewrite的功能

rewrite功能就是,使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標記位實現URL重寫以及重定向。
比如:更換域名后需要保持舊的域名能跳轉到新的域名上、某網頁發生改變需要跳轉到新的頁面、網站防盜鏈等等需求。

rewrite只能放在server{},location{},if{}中,并且默認只能對域名后邊的除去傳遞的參數外的字符串起作用,
例如?http://www.kgc.com/abc/bbs/index.php?a=1&b=2?只對/abc/bbs/index.php重寫。

rewrite實現跳轉的條件

Nginx:通過ngx_http_rewrite_module 模塊支持URL重寫、支持if條件判斷,但不支持else
跳轉:從一個 location跳轉到另一個location,循環最多可以執行10次,超過后nginx將返回500錯誤
PCRE支持:perl兼容正則表達式的語法規則匹配
重寫模塊 set 指令:創建新的變量并設其值

rewrite的執行順序

(1) 執行 server 塊里面的 rewrite 指令。
(2) 執行 location 匹配。
(3) 執行選定的 location 中的 rewrite 指令。
?

rewrite的語法格式

rewrite <regex> <replacement> [flag];
regex :表示正則匹配規則。
replacement :表示跳轉后的內容。
flag :表示 rewrite 支持的 flag 標記。###flag標記說明###
last :本條規則匹配完成后,不終止重寫后的url匹配,一般用在 server 和 if 中。
break :本條規則匹配完成即終止,終止重寫后的url匹配,一般使用在 location 中。
redirect :返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址。
permanent :返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址。

rewrite的示例

基于域名的跳轉:需要瀏覽器訪問www.www.com時自動跳轉到www.wwy.com

進入到nginx的配置文件中添加修改以下內容

檢測語法沒錯,重啟nginx

去到瀏覽器進行測試

輸入

跳轉

基于客戶端 IP 訪問跳轉:要求只有192.168.75.20主機能正常訪問網頁,其他所有主機訪問都會自動跳轉到維護頁面

進入到nginx的配置文件中添加修改以下內容

檢測語法沒錯,重啟nginx

去到瀏覽器,清楚完緩存,搜索

基于舊域名跳轉到新域名后面加目錄:現在訪問的是 http://www.www.com/post/,現在需要將這個域名下面的訪問都跳轉到http://www.wwy.com/bbs/post/

?

進入到nginx的配置文件中添加修改以下內容

?

檢測語法沒錯,重啟nginx

去到瀏覽器搜索http://www.www.com/post/123.html

跳轉

基于參數匹配的跳轉:現在訪問http://www.wwy.com/99跳轉到http://www.wwy.com頁面

??

進入到nginx的配置文件中添加修改以下內容

?

檢測語法沒錯,重啟nginx

去到瀏覽器搜索

跳轉

將對http://www.wwy.com網站的所有請求跳轉到自定義的維護頁面

???

進入到nginx的配置文件中添加修改以下內容

?

檢測語法沒錯,重啟nginx

去到瀏覽器搜索

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214290.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARM day3

題目&#xff1a;實現3盞燈的流水 代碼&#xff1a; .text .global _start _start: 設置RCC寄存器使能 LDR R0,0X50000A28 LDR R1,[R0] ORR R1,R1,#(0X1<<4) ORR R1,R1,#(0X1<<5) STR R1,[R0]設置PE10管腳為輸出模式 LDR R0,0X50006000 LDR R1,[R0] BIC R1,R1,…

文心ERNIE Bot SDK+LangChain:基于文檔、網頁的個性化問答系統

現在各行各業紛紛選擇接入大模型&#xff0c;其中最火且可行性最高的形式無異于智能文檔問答助手&#xff0c;而LangChain是其中主流技術實現工具&#xff0c;能夠輕松讓大語言模型與外部數據相結合&#xff0c;從而構建智能問答系統。ERNIE Bot SDK已接入文心大模型4.0能力&am…

如何使用Imagewheel本地搭建一個簡單的的私人圖床公網可訪問?

文章目錄 1.前言2. Imagewheel網站搭建2.1. Imagewheel下載和安裝2.2. Imagewheel網頁測試2.3.cpolar的安裝和注冊 3.本地網頁發布3.1.Cpolar臨時數據隧道3.2.Cpolar穩定隧道&#xff08;云端設置&#xff09;3.3.Cpolar穩定隧道&#xff08;本地設置&#xff09; 4.公網訪問測…

Java:字符流 文件輸出 與 讀入 方法

Java&#xff1a;字節流 文件輸出與讀入方法 并 實現文件拷貝 文章目錄 字符流FileReaderFileWrite 字符流 字符流底層就是字節流。 字符流 字節流 字符集 特點&#xff1a; 輸入流&#xff1a;一次讀入一個字節&#xff0c;遇到中文時&#xff0c;一次讀多個字節。 輸出流…

POJ-2777 Count Color

經典區間染色板子題 #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N 1e610; struct Segment{int l,r,id; }tr[N<<2]; int n,color,m;void pushdown(int u){if(tr[u].id){tr[u<<1].id tr[u<&l…

P5707 【深基2.例12】上學遲到題解

題目 學校和 yyy 的家之間的距離為s米&#xff0c;而 yyy 以v米每分鐘的速度勻速走向學校。 在上學的路上&#xff0c;yyy 還要額外花費10分鐘的時間進行垃圾分類。 學校要求必須在上午8:00到達&#xff0c;請計算在不遲到的前提下&#xff0c;yyy 最晚能什么時候出門。 由…

python中PDF2docx運行時出現錯誤提示:pixmap must be grayscale or rgb to write as png,怎樣解決?

這是由于pixmap&#xff08;像素圖&#xff09;的顏色空間不是灰度或RGB而導致的。可能是因為PDF2docx試圖將不支持的顏色空間轉換為PNG格式造成的。 要解決此問題&#xff0c;可以嘗試以下幾個步驟&#xff1a; 1.升級pdf2docx到最新版本。有時候最新版本已經解決了這個問題…

【影像組學入門百問】1#---#3

#1-影像組學的常規步驟是怎么樣的&#xff1f; 傳統影像組學的步驟包括&#xff1a; 1、影像獲取及預處理&#xff1b; 2、感興趣區(ROI)標定&#xff1b; 3、影像組學特征提取&#xff1b; 4、特征降維&#xff1b; 5、模型建立、優化。 #2-做影像組學用的電腦硬件配置有什么…

計算機視覺之手勢、面部、姿勢捕捉以Python Mediapipe為工具

計算機視覺之手勢、面部、姿勢捕捉以 Python Mediapipe為工具 文章目錄 1.Mediapipe庫概述2.手勢捕捉(hands)3.面部捕捉(face)4.姿勢捕捉(pose) 1.Mediapipe庫概述 Mediapipe是一個開源且強大的Python庫&#xff0c;由Google開發和維護。它提供了豐富的工具和功能&#xff0c…

ExecuteScalar()方法

ExecuteScalar()方法 大家好&#xff0c;我是免費搭建查券返利機器人賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我們將深入探討數據庫編程中的一個關鍵主題——ExecuteScalar()方法&#xff…

stm32學習總結:3、Proteus8+STM32CubeMX+MDK很有搞頭

stm32學習總結&#xff1a;3、Proteus8STM32CubeMXMDK很有搞頭 文章目錄 stm32學習總結&#xff1a;3、Proteus8STM32CubeMXMDK很有搞頭一、前言二、資料收集三、實際案例-點燈1、Proteus8安裝2、Proteus創建stm32F013C6項目并添加外圍LED電路3、STM32CubeMX配置F103C6引腳生成…

12.10_黑馬數據結構與算法筆記Java

目錄 058 鏈表 e10 判環算法1 thinking&#xff1a;什么是空指針&#xff1f; 058 鏈表 e10 判環算法2 059 數組 e01 合并有序數組1 059 數組 e01 合并有序數組2 060 隊列 鏈表實現1 061 隊列 鏈表實現2 062 隊列 環形數組實現 方法1-1 063 隊列 環形數組實現 方法1-2…

帶有 RaspiCam 的 Raspberry Pi 監控和延時攝影攝像機

一、說明 一段時間以來&#xff0c;我一直想構建一個運動激活且具有延時功能的樹莓派相機&#xff0c;但從未真正找到我喜歡的案例。我在thingiverse上找到了這個適合樹莓派和相機的好案例。它是為特定的魚眼相機設計的&#xff0c;但從模型來看&#xff0c;我擁有的廉價中國魚…

【Vulnhub 靶場】【Hackable: III】【簡單 - 中等】【20210602】

1、環境介紹 靶場介紹&#xff1a;https://www.vulnhub.com/entry/hackable-iii,720/ 靶場下載&#xff1a;https://download.vulnhub.com/hackable/hackable3.ova 靶場難度&#xff1a;簡單 - 中等 發布日期&#xff1a;2021年06月02日 文件大小&#xff1a;1.6 GB 靶場作者&…

k8s常用操作命令

目標 了解 Kubernetes基礎命令。對已部署的應用故障排除。 基礎命令&#xff1a;create&#xff0c;delete&#xff0c;get&#xff0c;run&#xff0c;expose&#xff0c;set&#xff0c;explain&#xff0c;edit create 命令&#xff1a;根據文件或者輸入來創建資源 # 創建…

消融實驗:深度學習的關鍵分析工具

消融實驗&#xff1a;深度學習的關鍵分析工具 在深度學習和機器學習領域&#xff0c;消融實驗&#xff08;Ablation Study&#xff09;是一種重要的實驗方法&#xff0c;用于理解和評估模型的各個組成部分對其整體性能的貢獻。通過這種方法&#xff0c;研究人員可以更深入地了…

Docker | 自定義網絡

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人???? ??個人主頁:Leo的博客 ??當前專欄:Docker系列 ?特色專欄: MySQL學習 ??本文內容: Docker | 自定義網絡 ??個人知識庫: 知識庫,歡迎大家訪問 1.前言 大家好,我是Leo哥…

當視覺遇到毫米波雷達:自動駕駛的三維目標感知基準

? 文章&#xff1a;Vision meets mmWave Radar: 3D Object Perception Benchmark for Autonomous Driving 作者: Yizhou Wang, Jen-Hao Cheng, Jui-Te Huang , Sheng-Yao Kuan , Qiqian Fu , Chiming Ni 編輯&#xff1a;點云PCL 歡迎各位加入知識星球&#xff0c;獲取PDF…

vector類

> 作者簡介&#xff1a;?舊言~&#xff0c;目前大二&#xff0c;現在學習Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右銘&#xff1a;松樹千年終是朽&#xff0c;槿花一日自為榮。 > 目標&#xff1a;熟悉vector庫 > 毒雞湯&#xff1a;從人生低谷…

UVM中的config_db機制傳遞interface

&#xff08;1&#xff09;定義interface interface my_if(input clk, input rst_n);logic [7:0] data;logic valid;endinterface &#xff08;2&#xff09;在tb中使用interface 定義了interface后&#xff0c;在top_tb中實例化DUT時&#xff0c;就可以直接使用。 先…