Nginx 對映指令指定重新導向以及重新導向類型

Nginx 對映指令指定重新導向以及重新導向類型

我透過編寫以下設定檔來實現重定向:

map $request_uri $new_uri {
    default https://github.com;
    /www http://wow.com;
    /?p=1 http://wow.com/p1;
}
server {
    listen 80;
    server_name TestDomain.com www.TestDomain.com;

    location / {
        if ($new_uri) {
            return 301 $new_uri;
        }
    }
}

現在,我還想控制每次重定向是 301 還是 302,所以我嘗試這樣做:

map $request_uri $new_uri {
    default https://github.com;
    /www http://wow.com;
    /?p=1 http://wow.com/p1;
}
map $request_uri $ret_code {
    default 302;
    /www 302;
    /?p=1 302;
}
server {
    listen 80;
    server_name TestDomain.com www.TestDomain.com;

    location / {
        if ($new_uri) {
            return $ret_code $new_uri;
        }
    }
}

但我似乎無法得到正確的返回語句,invalid return code當我測試配置時它會抱怨。如果變數中有回傳碼和 url,我該如何指定最後一行?

另外,有關如何將預設值配置為的任何指示:

map $request_uri $new_uri {
    default https://github.com$request_uri;

因此預設重定向規則設定testdomain.com/whatevergithub.com/whatever

答案1

我不知道如何實作狀態碼。

對於預設選項,您可以嘗試以下操作:

map $request_uri $new_uri {
    default DEFAULT;
    ...
}

server {
    listen 80;
    server_name TestDomain.com www.TestDomain.com;

    location / {
        if ($new_uri = "DEFAULT") {
            return $ret_code https://github.com$request_uri;
        }
        if ($new_uri) {
            return $ret_code $new_uri;
        }
    }
}

答案2

透過使用多個解決ifs

map $request_uri $new_uri {
    default DEFAULT;
    /www http://wow.com;
    /?p=1 http://wow.com/p1;
}
map $request_uri $ret_code {
    default 507;
    /www 302;
    /?p=1 301;
}
server {
    listen 80;
    server_name TestDomain.com www.TestDomain.com;

    location / {
        if ($new_uri = 'DEFAULT') {
                return 301 https://github.com$request_uri;
        }

        if ($ret_code = 301) {
            return 301 $new_uri;
        }

        if ($ret_code = 302) {
                return 302 $new_uri;
        }
    }
}

我將暫時不接受這個問題,看看是否有任何陷阱,以及是否有更好的方法來做到這一點。

相關內容