Para hacer esto en un solo bloque de servidor, puede utilizar un if y la $server_name
variable:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite^$scheme://$server_name permanent;
}
O, para mantener los parámetros de consulta:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^/(.*) $scheme://$server_name/$1 permanent;
}
Aquí, $server_name
se refiere al nombre del servidor primario, que es el primer nombre en la directiva server_name
, mientras $host
se refiere a la ho stname dado en la solicitud HTTP.
Tenga en cuenta que la instrucción if
en la configuración nginx no siempre hace lo que cabría esperar y algunos desaconsejan su uso. Consulte también https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
Esta respuesta se inspiró en this answer to another question que utiliza un enfoque similar.
'server_name * .example.com;' capturará cualquier subdominio incluyendo 'www' y' porno' ™ y 'cualquier cosa', si alguien está buscando redireccionar algo al dominio principal. Para la redirección http-> https puede incluir cualquier cosa usando 'server_name .ejemplo.com' - redireccionará tanto example.com como * .example.com. –
@DmitryVerhoturov cuando se utiliza '.example.com' ¿cuál es una buena manera de indicar que las variaciones como' www.' deben ser redirigidas a 'example.com'? ¿Sin usar las condiciones "si" para reducir el rendimiento? – PKHunter
@PKHunter, '.example.com' es la mejor manera de cubrir' * .example.com', [aquí está el documento] (http://nginx.org/en/docs/http/server_names.html). –