Nginx的Rewrite(地址重定向)

文章详细介绍了Nginx中的Rewrite功能,包括重定向场景、实现方法、实际应用,如URL规范化和域名迁移。讲解了Rewrite正则表达式、语法格式以及在server、if、location块中的使用。同时,阐述了location分类、优先级和与Rewrite的关系,提供了一套灵活的URL管理和请求处理策略。
摘要由CSDN通过智能技术生成

目录

前言 

一、Rewrite 跳转场景 

二、Rewrite 跳转实现

三、Rewrite实际场景

3.1Nginx跳转需求的实现方式

 3.2rewrite放在 server{},if{},location{}段中

3.3对域名或参数字符串

四、Rewrite正则表达式

五、Rewrite语法格式

5.1rewrite语法格式

 5.2flag标记说明

5.3last和break比较 

六、location分类

61.分类

6.2正则匹配的常用表达式

七、location优先级

八、rewrite与location做比较

8.1相同点

8.2不同点

8.3rewrite会写在location里,执行顺序

总结


前言 

访问重写 rewrite 是 Nginx HTTP 请求处理过程中的一个重要功能,它是以模块的形式存在于代码中的,其功能是对用户请求的 URI 进行 PCRE 正则重写,然后返回 30× 重定向跳转或按条件执行相关配置。 rewrite 模块内置了类似脚本语言的 set、if、break、return 配置指令,通过这些指令,用户可以在 HTTP 请求处理过程中对 URI 进行更灵活的操作控制。

一、Rewrite 跳转场景 

URL看起来更规范、合理

企业会将动态URL地址伪装成静态地址提供服务

网址换新域名后,让旧的访问跳转到新的域名上

服务端某些业务调整

二、Rewrite 跳转实现

 

三、Rewrite实际场景

3.1Nginx跳转需求的实现方式

使用rewrite进行匹配跳转

使用if匹配全局变量后跳转

使用location匹配再跳转

 3.2rewrite放在 server{},if{},location{}段中

location只对域名后边的除去传递参数外的字符串起作用

3.3对域名或参数字符串

使用if全局变量匹配
使用proxy_pass反向代理

四、Rewrite正则表达式

字符说明
^起始位置
$结束位置
*匹配前面的字符0次或多次
+匹配1次或多次
0次或一次
.匹配除“\n”之外的任何单个字符
\转义字符
\d匹配纯数字
{n}重复n次
{n,}重复n次,或更多次
{n,m}至少重复n次,最大重复m次
{,m}最多重复m次
[c]匹配单个字符c
[a-z]匹配a-z小写字母的任意一个
[a-zA-Z0-9]匹配a-z的大小写或0-9中的任意字符
()表达式的开始和结束位置
|或运算符

五、Rewrite语法格式

5.1rewrite语法格式

#命令语法

rewrite  <regex>  <replacement>  [flag] ;
 #<regex>  正则
 #<replacement>  跳转后的内容
 #[flag]    rewrite支持的flag标记

 5.2flag标记说明

名称说明
last相当于Apache的[L]标记,表示完成rewrite。
break本条规则匹配完成及终止,不在匹配后面的任何规则。
redirect返回302,临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新URL。
permanent返回301,永久重定向,该标记和redirect类似,但是是永久定向。
set标记表示当前规则匹配成功设置一个变量,并把变量传入下一条规则。

5.3last和break比较 

lastbreak
使用场景一般写在server和if中一般使用在location中
URL不终止重新后的URL匹配终止重写后的URL匹配

六、location分类

61.分类

location = patt{} [精准匹配]
location patt {} [一般匹配]
location ~ patt {} [正则匹配]

6.2正则匹配的常用表达式

标记说明
~执行一个正则匹配,区分大小写
~*执行一个正则匹配,不区分大小写
!~执行一个正则匹配,区分大小写不匹配
!~*执行一个正则匹配,不区分大小写不匹配
^~普通字符匹配,使用前缀匹配,如果匹配成功,则不再匹配其他location
=普通字符精确匹配,也就是完全匹配
@定义一个命名的location,使用再内部定向时

七、location优先级

location优先级

1、精准匹配    =

2、前缀匹配   ^~

3、按文件中顺序的正则匹配  ~或~*

4、匹配不带任何修饰的前缀匹配

5、通用匹配(/),如果没有其他匹配,任何请求都会匹配到

 优先级相同:

  • 正则看上下顺序,上面的优先;
  • 一般匹配看长度,最长的优先;
  • 精准,前缀、正则、一般都没有匹配到,最后再看通用匹配,一般匹配。

八、rewrite与location做比较

8.1相同点

都能实现跳转。

8.2不同点

rewritelocation
在同一域名内更改获取资源的路径对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器

8.3rewrite会写在location里,执行顺序

  • 执行server块里面的rewrite指令
  • 执行location匹配
  • 执行选定的location中的rewrite指令

总结

  1. 重定向功能:使用rewrite指令可以实现各种类型的重定向,如将HTTP请求重定向到HTTPS、非www重定向到www或反之等。通过设置返回状态码为301或302,可以实现永久或临时性重定向。

  2. URL重写功能:rewrite指令还可以在服务器配置块或location块中使用,用于修改URL的路径、查询参数等内容。你可以使用正则表达式来匹配和替换URL的特定部分。

  3. 正则表达式支持:Nginx的rewrite功能支持正则表达式,这使得对URL进行复杂匹配和替换变得更加灵活。你可以使用正则表达式进行精确的URL匹配,并根据需要进行重写或跳转。

  4. 强大的条件语句:除了基本的rewrite指令外,Nginx还提供了if指令,可以在rewrite配置中使用条件语句。这允许你根据特定的条件来执行不同的重写或跳转操作,从而进一步增强了rewrite的灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值