Nginx

Nginx map 指令用於指定重定向以及重定向類型

  • March 15, 2020

我通過編寫此配置文件使重定向工作:

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

通過使用多個解決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;
       }
   }
}

引用自:https://serverfault.com/questions/826379