Nginx Rewrite
基于本地服务器路径的重写
Rewrit
Rewrite跳转场景
1、可以让URL,看起来更规范、合理
2、企业中会将动态URL地址伪装成静态URL来提供服务
3、网址更换新域名后,让旧的域名跳转到新的域名上
4、服务端一些业务调整
Rewrite跳转实现
1.Nginx是通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。
2.另外该模块需要 PCRE支持,应在编译Nginx时指定PCRE 支持,默认已经安装。
3.根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。
4.重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。
5.rewrite功能就是使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
Rewrite跳转实际场景
nginx跳转需要的实现方式
使用rewrite进行匹配跳转(防盗链)
使用if匹配全局变量后跳转
使用location匹配再跳转(匹配的访问 路径URL location可以匹配本地的重写以及跨服务器的跳转)
rewrite放在server{}, if{},location{}段中
location只对域名后边的除去传递参数外的字符串起作用。
多个server模块 sever模块里包含location location包含if if里面包含rewrite
对域名或参数字符串
使用if全局变量匹配
使用proxy_pass反向代理
常见的Nginx的正则表达式
匹配符 |
说明 |
^ |
匹配输入字符串的起始位置 |
$ |
匹配输入字符串的结束位置 |
* |
匹配前面的字符零次或多次 |
+ |
匹配前面的字符字词或多次 |
? |
匹配前面的字符零次或一次 |
. |
匹配除“\n”之外的任何单个字符 |
\ |
将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用 |
\d |
匹配纯数字 |
{n} |
重复n次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n到m 次 |
[] |
定义匹配字符范围 |
[c] |
匹配单个字符c |
[a-z] |
匹配a-z小写字母的任意一个 |
[a-zA-Z0-9] |
匹配所有大小写字母或数字 |
() |
表达式开始和结束位置 |
l |
或运算符 |
Rewirte语法
rewrite < regex > < replacement > [flag]
regex:正则表达式
replacement :跳转后的内容
flag:rewrite支持的flag标记
flag标记
标记 |
说明 |
last |
相当于Apache的【L】标记,表示完成rewrite |
break |
本条规则匹配完成即终止,不在匹配后面的任何规则 |
redirect |
返回302临时重 |