La reescritura de Nginx para eliminar "www" no funciona

La reescritura de Nginx para eliminar "www" no funciona

he mirado muchoshilos SEy hecho variosbúsquedas en googley no puedo entender por qué no puedo redirigir www.mysite.coma mysite.commi servidor nginx.

El primer bloque del servidor realiza el http://mysite.info-> https://mysite.inforedireccionamiento como era de esperar. Así que no estoy seguro de por qué el segundo bloque del servidor no hace lo mismo para www.mysite.info-> mysite.info.

Aquí está la parte relevante de mi archivo nginx.conf:

server {
    server_name mysite.info;
    rewrite ^ https://$server_name$request_uri? permanent;
}

server {
    server_name www.mysite.info;
    rewrite ^ https://mysite.info$request_uri? permanent;
}

server {
    listen   443;
    ssl    on;
    server_name mysite.info;
    # other directives, handling PHP, etc.
}

¿Alguna idea sobre lo que está yendo mal?

Respuesta1

Estás redirigiendo a $server_name, que está www.mysite.infoen el segundo serverbloque, por lo que todo lo que hace es redirigir a HTTPS, sin cambiar el host.

rewrite ^ https://mysite.info$request_uri? permanent;

Eso manejará el cambio de host así como el cambio a HTTPS.

Si desea que la redirección sea independiente del protocolo, un mejor enfoque sería:

rewrite ^ $scheme://mysite.info$request_uri? permanent;

En versiones recientes de nginx, esto también funciona (y debería ser un poco más rápido):

return 301 $scheme://mysite.info$request_uri;

información relacionada