Nginx
Nginx map 指令用於指定重定向以及重定向類型
我通過編寫此配置文件使重定向工作:
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/whatever
為github.com/whatever
?
通過使用多個解決
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; } } }
我將暫時擱置這個問題,看看它是否有任何陷阱,是否有更好的方法來做到這一點。
我不知道如何實現狀態碼。
對於預設選項,您可以嘗試以下操作:
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; } } }