ngx_http_rewrite_module 使用 REPL 来改写URL,实现重定向重新匹配跳转改写反向代理URL功能。

重定向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server{
location / {
rewrite http://www.baidu.com;
}
location /test1 { #302 临时重定向
rewrite http://www.baidu.com redirect;
}
location /test2 { #301 永久重定向
rewrite http://www.baidu.com permanent;
}
location /test3 {
return 301 http://www.baidu.com;
}
}

重新匹配跳转

1
2
3
4
5
6
7
8
9
10
# 没有rewrite 后面没有任何 flag 时就顺序执行 
# 当 location 中没有 rewrite 模块指令可被执行时 就重写发起新一轮location匹配
server{
location / {
proxy_pass http://www.baidu.com;
}
location /test1 {
rewrite ^/test1/(.*) /s?wd=$1;
}
}
1
2
3
4
5
6
7
8
server{
location / {
proxy_pass http://www.baidu.com;
}
location /test1 {
rewrite ^/test1/(.*) /s?wd=$1 last;
}
}

改写反向代理URL

1
2
3
4
5
6
server{
location /test1 {
rewrite ^/test1/(.*) /s?wd=$1 break;
proxy_pass http://www.baidu.com;
}
}

P.S. proxy_pass 后面加/,意思是不会添加location的地址到反向代理URL。