La forma recomendada probablemente sería usar a map
, también porque estas variables se evalúan solo cuando se usan.
También return 301 ...
se prefiere el uso de las reescrituras, ya que no es necesario compilar ninguna expresión regular.
Aquí un ejemplo de dónde el host y el agente de usuario como una cadena concatenada se comparan con una única expresión regular:
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;
}
}
Y esto podría ser aún más flexible, por ejemplo, si no hay 2 sino más dominios involucrados.
Aquí hacemos un mapa www.domain.com
con los agentes de usuario a partir de Agent
a http://www.domain2.com
y www.domain2.com
con la exacta de agente de usuario Other Agent
a 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 : necesitará nginx 0.9.0 o superior para que la cadena concatenada en el mapa funcione.