Nginx高级(六):nginx rewrite规则模块解析

1、简介Rewrite是nginx服务器提供的一个重要基本功能,在Web服务器产品中几乎是必备的功能,主要用于实现URL的重写。URL的重写能让我们在改变网站结构后,无需要求客户端用户修改原来的书签,也无需其他网站修改对我们网站的链接地址,能够提高网站的安全性。2、规则模块解析rewrite和location的功能有点相像,都能实现跳转,主要区别在于rewrite常用于同一域名内更改获取资源的路径,而location是对一类路径做控制访问和反向代理,可以proxy_pass到其他服务器。很多情况下r
摘要由CSDN通过智能技术生成

一、简介

Rewrite是nginx服务器提供的一个重要基本功能,在Web服务器产品中几乎是必备的功能,主要用于实现URL的重写。Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

URL的重写能让我们在改变网站结构后,无需要求客户端用户修改原来的书签,也无需其他网站修改对我们网站的链接地址,能够提高网站的安全性。

二、rewrite与location区别及执行过程

rewrite和location的功能有点相像,都能实现跳转,主要区别在于rewrite常用于同一域名内更改获取资源的路径,而location是对一类路径做控制访问和反向代理,可以proxy_pass到其他服务器。很多情况下rewrite也会写在location里,它们的执行顺序是:

1.执行server块的rewrite指令
2.执行location匹配
3.执行选定的location中的rewrite指令

注意:如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{ },location{ },if{ }中,并且只能对域名后边的除去传递的参数外的字符串起作用。

三、rewrite常用全局变量

在这里插入图片描述

四、rewrite语法

rewrite指令语法:rewrite regex replacement [flag]

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分的内容,重定向到replacement部分,结尾是flag标记。应用位置:server、location、if。

在这里插入图片描述

regex: 用于匹配URI的正则表达式。
replacement:将正则匹配的内容替换成replacement (重写的内容)。
[flag]: 用来设置rewrite对URI的处理行为。

常用正则表达式说明:
在这里插入图片描述
小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。

flag标记说明:
在这里插入图片描述
在以上的flag标记中,last和break用来实现URL重写,浏览器地址栏的URL地址不变,但在服务器访问的程序及路径发生了变化。redirect和permanent用来实现URL跳转,浏览器地址会显示跳转后的URL地址。
last和break标记的实现功能类似,但二者之间有细微的差别,使用alias指令时必须用last标记,使用proxy_pass指令时要使用break标记。last标记在本条rewrite规则执行完毕后,会对其所在的server{…}标签重新发起请求,而break标记则会在本条规则匹配完成后,终止匹配,不再匹配后面的规则。

例子:

rewrite ^/(.*) http://www.test.com/$1 permanent;

说明:
rewrite为固定关键字,表示开始进行rewrite匹配规则。
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址。
replacement部分是http://www.test.com/$1 ,$1是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.test.com/$1 地址上。

五、rewrite相关指令

在这里插入图片描述
1. Break指令

break指令用来中断当前相同作用域中的其他nginx配置,与该指令处于同一作用域的nginx配置中,位于它前面的指令配置生效,位于后面的指令配置无效。
nginx服务器在根据配置处理请求的过程中遇到该指令时,回到上一层作用域继续向下读取配置。
使用范围:server块,location块,if块。
在这里插入图片描述
示例:

server {
   
        listen       80;
        server_name  localhost;
        #===== break && rewrite test =====
        #这里如果注释掉break,所有请求进来都是返回http200,this is breaktest...
        <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值