Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

142
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda