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