2021年12月9日 星期四

Nginx學習筆記 (7) - Rewrite重定向使用


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 匹配



沒有留言:

張貼留言