勿以浮沙筑高台
Rewrite重新路由
基本语法:
rewrite [正则表达式 替换前的URL] [替换后的URL] [标识];
作用范围: server域/location域/if判断里
正则表达式
符号 | 解释 |
---|---|
. | 匹配换行符()以外的字符 |
? | 重复0次或多次 |
+ | 重复1次或多次 |
* | 最少链接数,那台服务器链接数少就分发那一台 |
\d | 匹配数字 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
{n} | 重复n次或多次 |
{n} | 重复n次或多次 |
[c] | 匹配单个字符c |
[a-z] | 匹配a-z小写字母中任意一个 |
\ | 转义字符.(index.html) |
() | 匹配括号之间的内容,用$1,$2…调用 |
flag:
符号 | 解释 |
---|---|
redirect | 302跳转到rewrtie后面的地址。 |
permanent | 301永久调整到rewrtie后面的地址,即当前地址已经永久迁移到新地址,一般是为了对搜索引擎友好。 |
last | 将rewrite后的地址重新在server标签执行。 |
break | 将rewrite后地址重新在当前的location标签执行 |
break/last
server {
listen 80;
server_name www.mrfu.com;
location ~ ^/break {
## 这个是访问的实际路径地址,及当前nginx下文件路径
rewrite ^/break /test break;
}
location ~ ^/last {
## last 再次访问内部地址路由/test下
rewrite ^/last /test last;
}
location /test {
default_type application/json;
return 200 '{"status":"success"}';
}
}
① 访问 http://www.mrfu.com/test/ 返回 {“status”:“success”}
② 访问 http://www.mrfu.com/break 返回 404
③ 访问 http://www.mrfu.com/last 返回 {“status”:“success”}
redirect / permanent
server {
listen 80;
server_name www.mrfu.com;
location ~ ^/break {
rewrite ^/break /test break;
}
location ~ ^/redirect {
# rewrite ^/last /test last;
rewrite ^/last /test redirect;
}
location ~ ^/permanent{
rewrite ^/forbiden https://www.baidu.com permanent;
# rewrite ^/forbiden https://www.baidu.com redirect;
}
location /test {
default_type application/json;
return 200 '{"status":"success"}';
}
}
① 访问 http://www.mrfu.com/redirect 先返回302,地址重定后返回200
① 访问 http://www.mrfu.com/permanent 先返回301,永久重定向返回200,除非重启nginx