爱要怎么说出口,Nginx中rewrite的规则

rewrite作用

rewrite语法中可以使用nginx提供的全局变量和自定义变量,可以对过来的请求进行判断和处理,实现对url的重写和重定向。

有的同志说,直接让它跳转向自己的接口不就行了吗,为什么非要多此一举。

使用rewrite可以隐藏真实的接口路径,花里胡哨。

使用范围

一般放在下边三个域内使用:

server{}。

location{}。

if{}。

rewrite和location区别

二者都有跳转url的作用。

rewrite一般在server里边,进行跳转,即在一个域名下。

location可以代理到其他的IP,其他的端口。

二者的执行顺序(被server监听到后):

1、执行server中的rewrite。

2、执行location匹配。

3、执行location中的rewrite。

如果某一步url被重写,则重复执行1-3顺序,知道找到应去的真实路径。

如果一直没有被重写,则按照正常顺序执行。

看一个例子:

http://www.xiaolaoben.com/api/route/exgx.action?userId=001

rewrite只对/api/route/exgx.action重写。

rewrite表达式只对域名后边的除去传递的参数外的字符串起作用。

将一个url分为前中后三部分,rewrite只对中间进行重写。

所以说rewrite是同一个域名内的跳转,而location可以跳转向其他IP。

rewrite语法

格式

rewrite regex replacement [flag].

rewrite '^/words/([a-z]{3})/([a-z]{2})/(.*)/.(doc|docx)$' /data?fileName=$3.$4 last;

regex

​ 正则表达式,比较难写的,写的时候看看文档。

​ ^ :正则表达式的开始。

​ $ :正则表达式的结束。

​ 小括号里面的内容,第一个小括号,第二个小括号,第三个小括号分别由$1,$2,$3来表示。

​ 比如来的请求url:/words/abc/ab/laoben.docx

​ 正则匹配通过,就会修改为:/data?fileName=laoben.docx,然后进行location匹配。

replacement

​ 要替换的url内容。

​ 将前边的路径,修改为replacement的内容。

flag

​ last: 停止rewrite检测,发起新的location匹配。

​ break: 停止rewrite检测,不发起新的location匹配。

​ redirect: 返回302临时重定向。

​ permanent: 返回301永久重定向。

last和break要慎用,小心导致死循环。

一般情况下:

server和if内使用last,重写后的url直接进行location匹配,直到找到应去路径,最多匹配10次,否则返回500。

location内使用break,重写后的url不进行location匹配,终止rewrite语句,执行该location内非rewrite指令集,别继续匹配来匹配去了,往下走。

···················································································
rewrite规则挺复杂的,你品,你细品。

参考地址:

https://www.nginx.cn/216.html

http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/

https://www.jb51.net/article/157469.htm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值