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