A maneira recomendada provavelmente seria usar a map
, também porque essas variáveis são avaliadas apenas quando são usadas.
Também return 301 ...
é preferível o uso de reescritas, porque nenhuma expressão regular precisa ser compilada.
Aqui um exemplo de onde host e user-agent como uma cadeia concatenada são comparados a uma única regex:
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;
}
}
E isso pode ser ainda mais flexível, por exemplo, se não houver 2, mas mais domínios envolvidos.
Aqui nós mapear www.domain.com
com user-agents começando com Agent
a http://www.domain2.com
e www.domain2.com
com a exata user-agent Other Agent
para 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;
}
}
Nota: você precisará do nginx 0.9.0 ou superior para que a sequência concatenada no mapa funcione.