Nginx的Rewrite(地址重定向)

目录

前言 

一、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 跳转实现

Nginx的Rewrite(地址重定向)_第1张图片

 

三、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      [flag] ;
 #  正则
 #  跳转后的内容
 #[flag]    rewrite支持的flag标记

 5.2flag标记说明

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

5.3last和break比较 

last break
使用场景 一般写在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不同点

rewrite location
在同一域名内更改获取资源的路径 对一类路径做控制访问或反向代理,还可以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的灵活性。

你可能感兴趣的:(nginx,运维)