Рекомендованим способом, ймовірно, було б використання а 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 або вище.