目录

  • rewrite作用
  • 使用范围
  • rewrite和location区别
  • rewrite语法
  • 格式
  • regex
  • replacement
  • flag


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