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.mzph.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;而梯度则…