Rewrite 重定向
語法:
rewrite regex replacement [flag];
若 path 符合後面 regex 正規匹配的話,會重定向到 replacement 位置
範例:
server {
listen 80;
server_name localhost;
location / {
rewrite /redirect/(.*) https://www.google.com;
}
location /test {
rewrite /test/(.*) /$1;
}
location /test2 {
return 202;
}
}
若打來的 path 是
- curl localhost/redirect/ttt
會收到 302 Found 重定向的回應,若希望 curl 照著重定向指示的話,要加上 -L 參數:curl -L localhost/redirect/ttt,就會看到重定向結果的 google 頁面的回應
- curl -I localhost/test/test2
會收到 202 status code,一開始匹配會到 /test,之後遇到 rewrite /test/(.*) /$1;,/test/test2 會改以 /test2 再搜尋一次匹配,最後匹配到 /test2,因此收到 202
replacement 若是 https:// 或 http:// 開頭,會回給客戶端要客戶端做 302 重定向,若是 path 的話則重新匹配 location
rewrite flag:
1. last:直接進行 location 匹配
2. break:直接進行 location 匹配
3. redirect:返回 302 重定向
4. permanent:返回 301 永久重定向
稍微說明一下 1 和 2,其實兩個同樣功用
server {
listen 80;
server_name localhost;
location / {
rewrite ^/test1 /test3;
rewrite ^/test2 /test4 last;
return 200;
}
location /test3 {
return 203;
}
location /test4 {
return 204;
}
}
- curl -I localhost/test1
會收到 200,其實走到 rewrite 並不會馬上執行,而會跑完整個 location block 才執行,因為最後有 retrun 200 ,所以收到 200 而非 203
- curl -I localhost/test2
會收到 204,因為 last 會直接執行 rewrite 以 /test4 重新做 location 匹配
沒有留言:
張貼留言