Nginx正則表達式

目錄

1.nginx常用的正則表達式

2.location

location 大致可以分為三類

location 常用的匹配規則

location 優先級

location 示例說明

優先級總結

3.rewrite

rewrite功能

rewrite跳轉實現

rewrite執行順序

語法格式

rewrite示例

實例1:

實例2:

實例3:

實例4:


1.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] :匹配所有大小寫字母或數字
  • () :表達式的開始和結束位置
  • | :或運算符

2.location

location 大致可以分為三類

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

location 常用的匹配規則

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

location 優先級

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

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匹配用戶的訪問路徑并跳轉頁面;如果最長的前綴匹配是不帶^~的,則會繼續看其它的正則匹配

前綴匹配看長度,最長的優先匹配;正則匹配看上下順序,根據配置文件的配置由上往下依次匹配,匹配到即停止

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

rewrite示例

實例1:

  • 將請求http://bbs.yy.com/abc/index.html的訪問跳到http://www.yy.com/bbs/abc/index.html保證原域名后面的url路徑不變
location /abc {
rewrite (.+) http://www.yy.com/bbs$1 permanent;  
}                                              #這里的$1為位置變量,代表/abclocation / {
root html;
index index.html index.htm;
}systemctl restart nginx                        #重啟nginx服務

實例2:

  • 將請求http://www.yy.com/bbs/index.html跳轉到http://www.benet.com/bbs/index.html,保證原域名后面的url路徑不變
location  / {if ($host = 'www.yy.com'){rewrite ^/(.*)$ http://www.benet.com/$1 permanent;
}root html;index index.html index.htm;
}systemctl restart nginx                        #重啟nginx服務

實例3:

  • 將請求http://www.yy.com/abc/123.html 跳轉到首頁http://www.yy.com
if ($request_uri ~ ^/abc/123.html$) {
rewrite (.+) http://www.yy.com permanent;
}$request_uri:包含請求參數的原始URI,不包含主機名
$uri:這個變量指當前的請求URI,不包括任何參數
$document_uri:與$uri相同,這個變量指當前的請求URI,不包括任何傳遞參數systemctl restart nginx                   #重啟nginx服務

實例4:

  • 將對http://www.yy.com網站的所有請求跳轉到自定義的維護頁面
set $rewrite true;                            
if ($remote_addr = "192.168.88.13") {
set $rewrite false;
}if ($rewrite = true) {
rewrite (.+) /weihu.html;
}location = /weihu.html {
root html;
}#只有IP為192.168.88.13能正常訪問,其他地址都是維護頁面systemctl restart nginx        #重啟服務

自己主機可以正常訪問

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

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

相關文章

生活小記錄

上個月項目總算上線了&#xff0c;節奏也慢慢調整正常。發現自己好久沒有記錄生活點滴了&#xff0c;正好寫寫。其實&#xff0c;最近這段日子發生的事情還是挺多的。 流感 媳婦11.24得流感&#xff0c;這件事情特別好笑&#xff0c;大晚上她和我妹妹想喝酒試試&#xff0c;結…

【Python必做100題】之第六題(求圓的周長)

圓的周長公式&#xff1a;C 2 * pi * r 代碼如下&#xff1a; pi 3.14 r float(input("請輸入圓的半徑&#xff1a;")) c 2 * pi *r print(f"圓的周長為{c}") 運行截圖&#xff1a; 總結 1、圓周長的公式&#xff1a;C 2 * pi * r 2、輸出結果注意…

webrtc 工具類

直接上代碼&#xff1b;webrtc 工具類 package com.example.mqttdome;import android.app.Activity; import android.content.Context; import android.content.Intent; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionMa…

API低代碼開發平臺的實際應用及好處

API低代碼開發平臺是一種快速開發工具&#xff0c;可以幫助企業快速構建和部署應用程序&#xff0c;并提供易于使用的API集成。 實際應用 API低代碼開發平臺的應用范圍非常廣泛&#xff0c;包括但不限于以下幾個方面&#xff1a; 企業級應用程序開發&#xff1a;API低代碼開發…

TypeScript中的類型縮小、類型謂詞

一. 概覽 TypeScript中的類型縮小的方式有typeof、in等方式進行類型縮小。 二. 類型縮小 typeof function test(a: string| number | string []) {if(a) {if(typeof a string) {} else if(typeof a number) {}} }in關鍵字 nterface ISideBar {hide: () >void }interf…

mybatis-plus查詢的字段和mysql關鍵字重名

先看一下這個 TableField("show") 這個注解表示當前屬性對應在數據庫的字段為show&#xff0c;但是show在mysql中為關鍵字&#xff0c;直接查詢會導致語法錯誤 正確寫法應該是 但寫sql由和mybatis-plus理念相違背&#xff0c; 并且無法輕松創建對應方法&#xff0…

第8課 SQL入門之使用數據處理函數

文章目錄 8.1 函數8.2 使用函數8.2.1 文本處理函數8.2.2 日期和時間處理函數8.2.3 數值處理函數 表8-3 常用數值處理函數 這一課介紹什么是函數&#xff0c;DBMS支持何種函數&#xff0c;以及如何使用這些函數&#xff1b;還將講解為什么SQL函數的使用可能會帶來問題。 8.1 函數…

數據結構之----邏輯結構、物理結構

數據結構之----邏輯結構、物理結構 目前我們常見的數據結構分別有&#xff1a; 數組、鏈表、棧、隊列、哈希表、樹、堆、圖 而它們可以從 邏輯結構和物理結構兩個維度進行分類。 什么是邏輯結構&#xff1f; 邏輯結構是指數據元素之間的邏輯關系&#xff0c;而邏輯結構又分為…

HCIA-H12-811題目解析(5)

1、【單選題】 以下關于Hybrid端口說法正確的有&#xff1f; 2、【單選題】使用命令"vlan batch 10 20"和"valn batch 10 to 20"&#xff0c;分別能創建的vlan數量是&#xff1f;&#xff08;&#xff09; 3、【單選題】二層ACL的編號范圍是&#xff1f;…

Scala日志log4j,序列化Gson

一、日志輸出log4j 1. Scala中配置log4j依賴 對于 Maven 項目,可以在 pom.xml 文件中添加以下內容: <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>2.創建…

VueUse工具庫

VueUse VueUse不是Vue.use&#xff0c;它是為Vue 2和3服務的一套Vue Composition API的常用工具集&#xff0c;是目前世界上Star最高的同類型庫之一。它的初衷就是將一切原本并不支持響應式的JS API變得支持響應式&#xff0c;省去程序員自己寫相關代碼。 VueUse 是一個基于 …

Java畢業設計 SSM SpringBoot 在線學習系統

Java畢業設計 SSM SpringBoot 在線學習系統 SSM SpringBoot 在線學習系統 功能介紹 首頁 圖片輪播 視頻推薦 在線學習 學習介紹 評論 收藏 資料中心 資料詳情 下載資料 話題討論 文檔發布 試題中心 系統公告 登錄 注冊學生 個人中心 試題記錄 錯題本 我的收藏 算法演示 結果分…

C語言 害死人不償命的(3n+1)算法 挖掘機技術哪家強 選擇排序 貪心算法

1.害死人不償命的&#xff08;3n1)算法 卡拉茲( Calatz)猜想: 對任何一個自然數n,如果它是偶數,那么把它砍掉一半;如果它是奇數,那么把(3n1)砍掉一半。這樣一直反復砍下去,最后一定在某一步得到n1。卡拉茲在1950年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員…

持續集成交付CICD:Jenkins使用GitLab共享庫實現前后端項目Sonarqube

目錄 一、實驗 1.Jenkins使用GitLab共享庫實現后端項目Sonarqube 2.優化GitLab共享庫 3.Jenkins使用GitLab共享庫實現前端項目Sonarqube 4.Jenkins通過插件方式進行優化 二、問題 1.sonar-scanner 未找到命令 2.npm 未找到命令 一、實驗 1.Jenkins使用GitLab共享庫實現…

Vue學習筆記-Vue3中ref和reactive函數的使用

前言 為了讓vue3中的數據變成響應式&#xff0c;需要使用ref,reactive函數 ref函數使用方式 導入ref函數 import {ref} from vue在setup函數中&#xff0c;將需要響應式的數據通過ref函數進行包裝&#xff0c;修改響應式數據時&#xff0c;需要通過: ref包裝的響應式對象.val…

Flink之遲到的數據

遲到數據的處理 推遲水位線推進: WatermarkStrategy.<Event>forBoundedOutOfOrderness(Duration.ofSeconds(2))設置窗口延遲關閉&#xff1a;.allowedLateness(Time.seconds(3))使用側流接收遲到的數據: .sideOutputLateData(lateData) public class Flink12_LateDataC…

力扣編程題算法初階之雙指針算法+代碼分析

目錄 第一題&#xff1a;復寫零 第二題&#xff1a;快樂數&#xff1a; 第三題&#xff1a;盛水最多的容器 第四題&#xff1a;有效三角形的個數 第一題&#xff1a;復寫零 力扣&#xff08;LeetCode&#xff09;官網 - 全球極客摯愛的技術成長平臺 思路&#xff1a; 上期…

【SpringBoot教程】SpringBoot 統一異常處理(附核心工具類-ErrorInfoBuilder)

作者簡介&#xff1a;大家好&#xff0c;我是擼代碼的羊駝&#xff0c;前阿里巴巴架構師&#xff0c;現某互聯網公司CTO 聯系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我進群&#xff0c;大家一起學習&#xff0c;一起進步&#xff0c;一起對抗…

曲線分板機主軸有何特點?如何選擇合適的曲線分板機主軸?

在現代工業領域&#xff0c;分板機主軸作為重要的機械部件&#xff0c;其性能和質量對于生產效率和產品質量具有至關重要的影響。而在這其中&#xff0c;曲線分板機主軸則因為其獨特的優勢而被廣泛應用于PCB電路板的切割和分板。面對市場上眾多的曲線分板機主軸品牌&#xff0c…

【深度學習】loss與梯度與交叉熵的關系

問的GPT3.5 模型訓練時loss與梯度的關系&#xff1f; 在深度學習模型訓練過程中&#xff0c;loss&#xff08;損失函數&#xff09;與梯度&#xff08;gradient&#xff09;之間存在密切關系。損失函數衡量模型在給定輸入上的預測輸出與實際輸出之間的差距&#xff0c;而梯度則…