rewrite可以改下请求的url,改写后可以以重定向的方式返回给调用方, 也可以继续匹配location,这些不同的行为是通过指令最后的flag来区分的
4个flag
- permanent: 永久重定向,nginx返回301给调用方
- redirect: 临时重定向,nginx返回302给调用方
- last: 使用改写后的URL,重新在location上匹配
- break: 结束指令脚本执行,不再匹配,也不再执行后面的return指令(如果有的的话),直接去root或alias匹配对应的资源,如果不存在则返回404
- 空: 如果没有设置flag,则会继续执行后面的指令
示例
以下不同的rewrite规则下,访问 /first/file.txt 分别返回什么?
- 默认的空值
location /first {
rewrite /first(.*) /second$1;
return 200 "first!";
}
location /second {
return 200 "second!";
}
返回 "first!",因为flag为空的时候,会继续执行后面return指令
- break
location /first {
rewrite /first(.*) /second$1 break;
return 200 "first!";
}
location /second {
return 200 "second!";
}
返回 second目录下的file.txt文件,因为break后就不再匹配,而是去root目录下匹配文件
- last
location /first {
rewrite /first(.*) /second$1 last;
return 200 "first!";
}
location /second {
return 200 "second!";
}
返回 "second!",因为last使用改写后的url重新匹配,这个时候就会匹配到 location /second