Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

137
Vistas
regla de reescritura de nginx condicional que excluye la redirección a www si www ya está en la solicitud

Estoy usando nginx para administrar múltiples dominios para el proxy inverso.

Quiero redirigir todas las solicitudes de http a https

 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; }

Sin embargo, no estoy seguro de cómo puedo hacer que funcione para reescribir solicitudes que no sean www para redirigir a www de manera genérica, excluyendo la reescritura de aquellas solicitudes que ya tienen www en las solicitudes, ya que si solo modifico la regla a continuación, crea un problema cuando alguien escribe como www. dominio.com se reescribe a www.www.dominio.com

 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://www.$host$request_uri; }

Por favor revise esta imagen para entender el problema. redireccionando a www.www.dominio

Así que necesito tener alguna condición que maneje eso.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

por favor intente esto

 server { listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com me.yourdomain.com; return 301 https://yourdomain.com$request_uri; }

esto reescribirá los 3 dominios a https://yourdomain.com

No estoy seguro de mi respuesta. No puedo probar esto ahora. por favor intente esto y comente de nuevo

over 4 years ago · Santiago Trujillo Denunciar

0

Si desea un enfoque genérico, puede usar la directiva de map (debe colocarse fuera del bloque del server ):

 map $host $basename { ~^www\.(.+) $1; default $host; } server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$basename$request_uri; }

Actualización 1

Parece que leí mal su pregunta (debe redirigir example.com a www.example.com pero mi respuesta hace lo contrario), intente lo siguiente:

 map $host $basename { ~^www\.(.+) $host; default www.$host; } server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$basename$request_uri; }

Actualización 2

OP hace una pregunta adicional:

¿Hay alguna manera de excluir un subdominio específico como static.example.com que no quiero volver a escribir en www.static.example.com ?

Sí, se puede evitar la reescritura del subdominio static con el siguiente bloque de map :

 map $host $basename { ~^(?:www|static)\..+ $host; default www.$host; }

Si desea evitar la reescritura de cualquier nombre de dominio de tres componentes, puede utilizar

 map $host $basename { ~[^.]+\.[^.]+\.[^.]+ $host; default www.$host; }
over 4 years ago · Santiago Trujillo Denunciar

0

Redirección de no www a www y https

Si entiendo correctamente, entonces quiere forzar que no www a www. Y desea forzar todas las solicitudes a https. Este código de configuración verifica si $host comienza con "www." O no. Si no es así, nginx agregará "www." antes de $host y luego devuelva la ubicación https correcta. Funcionará con subdominios también.

 server { if ($host !~* ^www\.) { # if host name starts with (case insensitive) "www." return 301 https://www.$host$request_uri; } if ($host ~* ^www\. ) { # if host name doesn't start with (case insensitive) "www." return 301 https://$host$request_uri; } listen 80 default_server; listen [::]:80 default_server; server_name _; return 404; }

Posiblemente mejor manera con Certbot

Puede producir automáticamente el código que necesita utilizando Certbot . También lo ayudará a administrar mucho los certificados y automatizar la renovación. Pero Certbot no cambiará no-www a www, tendrá que editar la configuración generada automáticamente para que se vea como la configuración anterior. La otra diferencia es que se espera que tenga diferentes bloques/archivos de configuración por dominio, pero no estoy seguro si es necesario. Así es como se ve la configuración predeterminada por dominio.

 server { if ($host = www.yourdomain.com) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = yourdomain.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; return 404; # managed by Certbot }

Creo que es una buena práctica separar los archivos de configuración para cada dominio y subdominio y usar el formato predeterminado de Certbot hasta que haya entendido más Nginx. De esta manera puedes deshabilitar la redirección de no-www a www muy fácilmente. El código predeterminado anterior de Certbot sería lo que pondría cuando no desea redirigir en ese caso. A largo plazo, esto tiene más sentido para mí, pero entiendo que cuando los usuarios se sientan más cómodos con www u otras partes del sitio web, es posible que necesiten www.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda