Redirigir correctamente dominio sin www en Nginx

Redirección validada en http://seositecheckup.com/
Redirección correcta con Nginx

Haciendo test de velocidad de mi WordPress, vi que el llamado Time to First Byte me tardaba mucho y me daba puntuaciones bajas.

Así que me entretuve intentando optimizar el servidor Nginx desde su configuración nginx.conf sin conseguir apenas mejoras.

Casi sin querer, hice otro test de otro dominio que tengo y ví que el First Byte me lo resolvía muy rápido, en menos de 200ms. Por lo que el problema no era de alojamiento, sino o bien del wordpress o bien de la configuración de ese dominio en el Nginx.

Después de trastear y probar varias cosas, ví que en mi redirección del dominio sin www al con www lo tenía puesto de una forma un poco «extraña», con condicionantes y expresiones regulares que no me terminaba de convencer:

Forma errónea:

server {
 server_name  www.dominio.com dominio.com;
 if ( $host != 'www.dominio.com' ) {
 rewrite ^/(.*)$ http://www.dominio.com/$1 permanent;
 }

Por lo que me fui directamente a la fuente principal de información, que es la página de ngnix, más concretamente en la parte de rewrite rules
El error, o el problema, es que al traducir la típica redirección del .htaccess de Apache alguien lo puso de esa manera y se extendió su uso.

En ese mismo enlace podéis comprobar que la forma correcta, eficiente y buena para SEO en términos de canonical y evitar contenido duplicado, etc (una redirección 301), es esta:

Forma correcta:

server {
       server_name dominio.com;
       rewrite ^(.*) http://www.dominio.com$1 permanent;
 }
server {
       server_name www.dominio.com;
       ------resto configuración---
 }

Si lo que quieres hacer es redirigir el dominio con www al sin www lo haces igual pero a la inversa.

Actualizo

Forma con redirect, haciendo un 301 y utilizando scheme para que te valga tanto para http como https:

server {
    listen       80 443;
    server_name  dominio.com;
    return       301 $scheme://www.dominio.com$request_uri;
}

server {
    listen       80;
    server_name  www.dominio.com;
    ...
}

server {
    listen 443 ssl;
    server_name www.dominio.com;
    ...
}

 

Votar
[Total: 0 Media 0]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *