nginx中的正则表达式及location和rewrite

news2024/10/5 21:18:09

目录

常用的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.coloradmin.cn/o/1302322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql:查询当前登录的用户

可以使用USER()函数查询当前登录的用户&#xff0c;例如&#xff1a;

Axure->Axure安装,Axure菜单栏和工具栏功能介绍,页面及概要区

Axure安装Axure菜单栏和工具栏功能介绍&#xff0c;页面及概要区 1.Axure安装 即时设计 - 可实时协作的专业 UI 设计工具 (js.design) 点击上方下载安装⬆ 打开软件点击帮助->管理授权-> 被授权人 Axure 授权密钥:gjqpIxSSUUqFwPoZPi8XwBBhRE2VNmOQsrord0JqShk4QCXxrw6…

Java智慧校园-中小学校园管理系统源码

智慧校园系统是通过信息化手段&#xff0c;实现对校园内各类资源的有效集成 整合和优化&#xff0c;实现资源的有效配置和充分利用&#xff0c;将校务管理过程的优化协调。为校园提供数字化教学、数字化学习、数字化科研和数字化管理。 致力于为家长和教师提供一个全方位、多层…

天池SQL训练营(四)-集合运算-表的加减法和join等

-天池龙珠计划SQL训练营 4.1表的加减法 4.1.1 什么是集合运算 集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。 在标准 SQL 中, 分别对检索结果使用 U…

2023年度盘点:智能汽车、自动驾驶、车联网必读书单

【文末送书】今天推荐几本自动驾驶领域优质书籍 前言 2023年&#xff0c;智能驾驶和新能源汽车行业仍然有着肉眼可见的新进展。自动驾驶技术继续尝试从辅助驾驶向自动驾驶的过渡&#xff0c;更重要的是相关技术成本的下降。根据《全球电动汽车展望2023》等行业报告&#xff0c…

centos7进程管理

什么是进程 进程是已启动的可执行程序的运行实例&#xff0c;是程序运行的过程&#xff0c;动态的&#xff0c;有生命周期及运行状态。 ​ 程序&#xff1a; 二进制文件&#xff0c;静态 静态查看进程 查看进程&#xff08;一&#xff09; [rootzaotounan ~]# ps aux ps :pro…

upload-labs

01 随便上传个文件 发现对于上传类型有限制 查看页面代码发现是js的过滤直接关闭js 上传成功 右键图片在新建标签页打开文件 这里直接抓包改名字也行 02 抓包修改后缀名 03 发现后端做了检测抓包修改失败 大小写绕过失败&#xff0c;php特性php1等会被当成php执行 这里图片的…

RE2文本匹配调优实战

引言 在RE2文本匹配实战的最后&#xff0c;博主说过会结合词向量以及其他技巧来对效果进行调优&#xff0c;本篇文章对整个过程进行详细记录。其他文本匹配系列实战后续也会进行类似的调优&#xff0c;方法是一样的&#xff0c;不再赘述。 本文所用到的词向量可以在Gensim训练…

如何用CHAT写方案?

问CHAT&#xff1a;帮我写一份航空无动力乐园的可执行方案 CHAT回复&#xff1a; 方案一&#xff1a;概念及地点筛选 航空无动力乐园是指以航空运动为主题&#xff0c;利用自然地形与风力进行滑翔、跳伞等无动力航空运动的户外休闲娱乐乐园。鉴于此&#xff0c;首需要确定乐园…

裸机单片机适用的软件架构

单片机通常分为三种工作模式&#xff0c;分别是 1、前后台顺序执行法 2、操作系统 3、时间片轮询法 1、前后台顺序执行法 利用单片机的中断进行前后台切换&#xff0c;然后进行任务顺序执行&#xff0c;但其实在…

windows错误事件 98、41、7000、55、153解决办法

事件错误&#xff1a;98、55、153 疑难解答清单 在系统事件日志中&#xff0c;搜索新技术文件系统 (NTFS) 和磁盘相关的警告和错误。 例如&#xff0c;事件 ID 55、153 或 98。 管理员身份打开CMD&#xff0c;运行命令 chkdsk /scan 并检查结果。 该 chkdsk /scan 命令是只读…

SpringMVC项目出现404

目录 问题讲解&#xff1a; 解决方案&#xff1a; 1、处理器映射器和处理器适配器以及视图解析器没有配置好 2、Controller的包扫描没有加或者包扫描的配置是错误的 3、当然也有说jar包没有 4、请求地址是错误的 5、还有一种解决办法说web.xml配置DispatcherServlet的时…

有病但合理的 ChatGPT 提示语

ChatGPT 面世一年多了&#xff0c;如何让大模型输出高质量内容&#xff0c;让提示词工程成了一门重要的学科。以下是一些有病但合理的提示词技巧&#xff0c;大部分经过论文证明&#xff0c;有效提高 ChatGPT 输出质量&#xff1a; ​1️⃣ Take a deep breath. 深呼吸 ✨ 作用…

直流电和交流电

直流电&#xff08;Direct Current&#xff0c;简称DC&#xff09;和交流电&#xff08;Alternating Current&#xff0c;简称AC&#xff09;是电流的两种基本形式。 1. 直流电 直流电是指电流方向始终保持不变的电流。在直流电中&#xff0c;电子只能沿着一个方向移动。直流电…

力扣17. 电话号码的字母组合(java 回溯法)

Problem: 17. 电话号码的字母组合 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 题目给定一串数字&#xff0c;要求我们找出所有可能的字母组合&#xff0c;即我们可以穷举出所有可能的结果&#xff0c;而涉及到穷举我们自然可以想到利用回溯来解决问题&#xff0c…

Win10操作系统安装Python

1 Python解释器下载 1.1 安装环境 Windows 10 专业工作站版22H2 python-3.9.6-amd64.exe 1.2 下载地址 Python官网&#xff1a;Welcome to Python.org Python镜像&#xff1a;CNPM Binaries Mirror 2 Python解释器安装 2.1 Install Python 3.9.6 (64-bit)界面 双击运行下…

1个电子书模板网站!分分钟制作出精美电子书

随着互联网的发展&#xff0c;电子书已经成为了越来越多人的选择。想要制作一本精美的电子书&#xff0c;却苦于没有专业的技能和工具&#xff1f;别担心&#xff0c;小编向大家推荐一个电子书模板网站&#xff0c;让你分分钟制作出精美电子书&#xff01; 这个网站叫做[FLBOOK…

.net 安装Postgresql驱动程序ngpsql

.net 安装Postgresql驱动程序ngpsql 最近搞一个物联网项目&#xff0c;需要采集fanuc数控机床的数据&#xff0c;厂家提供的API只支持windows&#xff0c;所以就决定C#开发&#xff0c;数据库用postgresql&#xff0c; 安装数据库驱动一波三折。 作为一个讨厌微软的老程序猿&…

宝塔面板部署Apache服务器搭建本地站点发布到公网可访问【内网穿透】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

CTF比赛中web安全题型讲解

在CTF&#xff08;Capture The Flag&#xff09;竞赛中&#xff0c;Web安全题目是测试参赛者对Web应用漏洞利用和防御能力的重要环节。以下是30道Web类题型及其标准答案&#xff0c;对初次打比赛的网安人员来说&#xff0c;还是有一些帮助的&#xff0c;喜欢可以收藏。 题目及…