前言
环境:centos7.9 nginx1.8
当我们访问一个地址如:http://www.baidu.com/
,你会发现地址变成了:https://www.baidu.com/
,由http
变成了https
,类似的,当我们访问一个地址http://AAAAA.com
,地址跳转到了http://BBBB.com
,我们称之为URL
重定向,或称之为URL
跳转,nginx
中使用rewrite
指令结合正则表达式来实现URL
重定向。
return语法
return
语法只能放在server、location、if
中,该指令用于结束规则的执行并返回状态码给客户端。
示例:
location = /50x.html {
return 403; #直接return一个状态码返回给客户端
}
rewrite语法
指令语法:rewrite regex replacement [flag];
(即 rewrite 匹配内容 替代内容 标记;)
默认值:none
应用位置:server、location、if
rewrite
是实现URL
重定向的重要指令,它根据regex
(正则表达式)来匹配内容跳转到replacement
,结尾是flag
标记。
常用正则表达式:
字符 | 描述 |
\ | 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用 |
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或者多次 |
+ | 匹配前面字符串一次或者多次 |
? | 匹配前面字符串的零次或者一次 |
. | 匹配除“\n”之外的所有单个字符 |
(pattern) | 匹配括号内的pattern |
rewrite 最后一项flag标记:
标记 | 说明 |
last | 本条规则匹配完成后继续向下匹配新的location URI规则,客户端地址不会发生跳转 |
break | 本条规则匹配完成后即刻终止,不再继续向下匹配任何规则,客户端地址不会发生跳转 |
redirect | 返回302临时重定向,浏览器地址会显示为跳转后的地址 |
permanent | 返回301永久重定向,浏览器地址会显示为跳转后的地址 |
rewrite匹配顺序
当你写了多条rewrite,rewrite匹配顺序是从上往下匹配,匹配到之后就不再匹配余下的rewrite规则。
rewrite示例
资源重定向:
[root@nginx conf.d]# vim rewrite.conf #创建一个虚拟机
server{
listen 9089;
server_name localhost;
location /{
root /usr/local/nginx/html/rewrite;
index index.html;
try_files $uri $uri/ /index.html;
rewrite /index.php /index.html last; #使用rewrite命令进行资源重定向,模拟客户端访问index.php重定向到index.html
}
}
#创建index.html文件
[root@nginx conf.d] mkdir /usr/local/nginx/html/rewrite
[root@nginx conf.d] vim /usr/local/nginx/html/rewrite/index.html
网页模拟访问index.php(实际并没有这个文件)看是否成功重定向,如下图所示:
域名重定向(以小米官网为例):
server{
listen 80;
server_name www.xiaomi.com; #旧域名www.xiaomi.com
rewrite / www.mi.com permanent; #该旧域名的全部请求都会永久重定向到www.mi.com
}
.......
}
server{
listen 80;
server_name www.mi.com; #新的域名www.mi.com
root html/mi/;
}
.......
}
#以上域名要能解析(本地host解析或dns解析),这样在浏览器访问http://www.xiaomi.com时就会跳转到http://www.mi.com