环境: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语法只能放在server、location、if中,该指令用于结束规则的执行并返回状态码给客户端。
示例:
location = /50x.html {<!-- --> return 403; #直接return一个状态码返回给客户端 }
指令语法: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规则。
资源重定向:
[root@iflytek 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@iflytek conf.d] mkdir /usr/local/nginx/html/rewrite [root@iflytek 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