目录
一、Rewrite简单介绍
1、Rewrite的概述
rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向
rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
2、Rewrite跳转场景
- URL看起来更规范、合理
- 企业会将动态URL地址伪装成静态地址提供服务
- 网址换新域名后,让旧的访问跳转到新的域名上
- 服务端某些业务调整
3、URI、URL、URN
- URI:是统一资源标识符,可以唯一标识一个资源
- URL:是统一资源定位符,可以提供找到该资源的路径
- URN:名称定位
4、Rewrite跳转实现
ngx_http_rewrite_module这个模块来实现跳转功能
5、Rewrite实际场景
Nginx跳转需求的实现方式
- 使用rewrite进行匹配跳转
- 使用if匹配全局变量后跳转
- 使用location匹配再跳转
rewrite放在 server{},if{},location{}段中
- location只对域名后边的除去传递参数外的字符串起作用
对域名或参数字符串
- 使用if全局变量匹配
- 使用proxy_pass反向代理
6、Nginx正则表达式
字符 | 涵义以及示例 |
---|---|
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或多次;如“ol*”能匹配“o”及“ol”、“oll” |
+ | 匹配前面的字符一次或多次;如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o” |
? | 匹配前面的字符零次或一次;例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}” |
. | 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式 |
\ | 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“$”则匹配“$” |
\d | 匹配纯数字 |
\s | 匹配空的(空格或者制表符) |
{n} | 重复 n 次 |
{n,} | 重复 n 次或更多次 |
{n,m} | 重复 n 到 m 次 |
[ ] | 定义匹配的字符范围 |
[c] | 匹配单个字符 c |
[a-z] | 匹配 a-z 小写字母的任意一个 |
[a-zA-Z0-9] | 匹配所有大小写字母或数字 |
() | 表达式的开始和结束位置 |
| | 或运算符 |
7、Rewrite执行顺序
- 执行 server 块里面的 rewrite 指令
- 执行 location 匹配
- 执行选定的 location 中的 rewrite 指令
语法: rewrite [flag];
regex :表示正则匹配规则
replacement :表示跳转后的内容
flag :表示 rewrite 支持的 flag 标记
###flag标记说明###
last :本条规则匹配完成后,继续向下匹配新的location URI规则,一般用在 server 和 if 中
break :本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
二、location简单介绍
1、location的分类
- 精准匹配:location = / {}
- 一般匹配:location / {}
- 正则匹配:location ~ / {}
2、location 常用的匹配规则
字符 | 含义 |
---|---|
= | 进行普通字符精确匹配,也就是完全匹配 |
^~ | 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location |
~ | 区分大小写的匹配 |
~* | 不区分大小写的匹配 |
!~ | 区分大小写的匹配取非 |
!~* | 不区分大小写的匹配取非 |