一、为什么要弄rewrite跳转
1、为了使URL看起来更规范、合理
2、将动态URL伪装成静态地址提供服务
3、网址换新域名后,让旧的访问跳转到新的域名上
4、服务端某些业务调整
二、Rewrite跳转实现
Nginx:由ngx_http_rewrite_module模块管理的 ,需要开启支持URL重写、支持if条件判断,但不支持else。
PCRE支持:perl兼容正则表达式的语法规则匹配。
跳转:从一个location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误。
重写模块set指令:创建新的变量并设其值。
** rewrite使用nginx全局变量或者自己设置的变量,结合正则表达式和标志位实现URL重写以及重定向。 **
三、Rewrite实际场景
1、Nginx跳转需要的实现方式
使用rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用location匹配再跳转
2、rewrite放在server{},if{}location{}中(这边是生效位置)
location只对域名后边的除去传递参数外的字符串起作用
3、对域名或参数字符串
使用if全局变量匹配
使用proxy_pass反向代理
四、Rewrite执行顺序
1、先执行server块里面的rewrite指令
2、然后执行选定的location中的rewrite指令
3、最后执行选定的location中if中的rewrite指令
五、Nginx正则表达式
字符 | 说明 |
---|---|
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前面的字符一次或多次 |
? | 匹配前面的字符零次或一次 |
. | 匹配除“\n”之外的任何单个字符 |
\ | 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用 |
\d | 匹配纯数字 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
[c] | 匹配单个字符c |
[a-z] | 匹配a-z小写字母的任意一个 |
[a-zA-Z] | 匹配a-z小写字母或A-Z大写字母的任意一个 |
\w | 匹配字母或者数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\b | 匹配单词的开始或结束 |
/ | |
() | 表达式的开始和结束位置 |
[] | 定义匹配的字符范围 |
Rewrite命令语法
rewrite <regex(正则)> <replacement(跳转后的内容)> [flag(rewrite支持的flag标记)]
标记 | 说明 |
---|---|
last | 相当于Apache的[L]标记,表示完成rewrite,一般用在server和if中 |
break | 本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在location中。 |
redirect | 返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url |
permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url |
一般last写在server和if中,break一般写在location中&