Рекомендуемый способ, вероятно, будет использовать, а map
также потому, что эти переменные оцениваются только тогда, когда они используются.
Кроме того, использование return 301 ...
предпочтительнее, чем перезапись, потому что регулярное выражение не нужно компилировать.
Вот пример, где хост и пользовательский агент в виде объединенной строки сравниваются с одним регулярным выражением:
map "$host:$http_user_agent" $my_domain_map_host {
default 0;
"~*^www.domain.com:Agent.*$" 1;
}
server {
if ($my_domain_map_host) {
return 302 http://www.domain2.com$request_uri;
}
}
И это может быть еще более гибким, например, если задействовано не 2, а несколько доменов.
Здесь мы отображаем www.domain.com
с пользователем агенты , начиная с Agent
к http://www.domain2.com
и www.domain2.com
с точным агентом пользователя Other Agent
для http://www.domain3.com
:
map "$host:$http_user_agent" $my_domain_map_host {
default 0;
"~*^www.domain.com:Agent.*$" http://www.domain2.com;
"~*^www.domain2.com:Other Agent$" http://www.domain3.com;
}
server {
if ($my_domain_map_host) {
return 302 $my_domain_map_host$request_uri;
}
}
Примечание: вам понадобится nginx 0.9.0 или выше, чтобы конкатенированная строка в карте работала.