redirecting redireccionar not doesn digitalocean redirect nginx

redireccionar - redirect 301 nginx https



nginx.conf redirige mĂșltiples condiciones (6)

Reescribiendo múltiples dominios en un solo dominio y evitando una condición de bucle en el navegador.

server { listen 80; server_name www.wanted_domain.com wanted_domain.com www.un_wanted_domain.com un_wanted_domain.com; if ($host = ''un_wanted_domain.com''){ return 301 $scheme://www.wanted_domain.com$request_uri; } if ($host = ''www.un_wanted_domain.com''){ return 301 $scheme://www.wanted_domain.com$request_uri; }

Quiero redirigir las solicitudes en dos condiciones usando nginx.

Esto no funciona:

if ($host = ''domain.com'' || $host = ''domain2.com''){ rewrite ^/(.*)$ http://www.domain.com/$1 permanent; }

¿Cuál es la forma correcta de hacer esto?


Aquí hay un enfoque declarativo:

server { listen 80; server_name domain.com domain2.com; return 301 $scheme://www.domain.com$uri; } server { listen 80 default_server; server_name _; #.... }


Creo que la forma más fácil de hacerlo es usar expresiones regulares:

if ($host ~ "domain.com|domain2.com") { rewrite ^/(.*)$ http://www.example.com/$1 permanent; }

Pero solo es bueno cuando solo tienes cadenas; para lógica compleja, seguro, no es correcto.


La forma correcta sería usar un servidor dedicado para la redirección:

server { server_name domain.com domain2.com; rewrite ^ http://www.domain.com$request_uri? permanent; }


Tuve el mismo problema antes. Debido a que nginx no puede hacer condiciones complejas o declaraciones if anidadas, necesita evaluar más de 2 expresiones diferentes.

establece una variable a algún valor binario y luego habilita si cualquiera de las condiciones es verdadera en 2 sentencias if diferentes:

set $my_var 0; if ($host = ''domain.com'') { set $my_var 1; } if ($host = ''domain2.com'') { set $my_var 1; } if ($my_var = 1) { rewrite ^/(.*)$ http://www.domain.com/$1 permanent; }


otra posibilidad sería

server_name domain.com domain2.com; set $wanted_domain_name domain.com; if ($http_host != $wanted_domain_name) { rewrite ^(.*)$ https://$wanted_domain_name$1; }

por lo que redirigirá todo a uno específico, pero se basa en el uso del caso, supongo