nginx配置location总结及rewrite规则写法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx配置location总结及rewrite规则写法相关的知识,希望对你有一定的参考价值。

2. Rewrite规则

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如http://sui.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写。语法rewrite regex replacement [flag];

 

如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。

 

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

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

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

2.1 flag标志位

1 last : 相当于Apache的[L]标记,表示完成rewrite
2 break : 停止执行当前虚拟主机的后续rewrite指令集
3 redirect : 返回302临时重定向,地址栏会显示跳转后的地址
4 permanent : 返回301永久重定向,地址栏会显示跳转后的地址

因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:

1 last一般写在server和if中,而break一般使用在location中
2 last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
3 break和last都能组织继续执行后面的rewrite指令

2.2 if指令与全局变量

if判断指令
语法为if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:

  • 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
  • 直接比较变量和内容时,使用=!=
  • ~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配
1 -f和!-f用来判断是否存在文件
2 -d和!-d用来判断是否存在目录
3 -e和!-e用来判断是否存在文件或目录
4 -x和!-x用来判断文件是否可执行

 

以上是关于nginx配置location总结及rewrite规则写法的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置location总结及rewrite规则写法

nginx配置location总结及rewrite规则写法

nginx配置location总结及rewrite规则写法

nginx配置location总结及rewrite规则写法

nginx配置location总结及rewrite规则写法

nginx location匹配及rewrite规则