Cómo crear redireccionamientos temporales y permanentes con Nginx

Introducción

La redirección HTTP es una forma de señalar un dominio o una dirección hacia otro. Hay varios tipos diferentes de redireccionamientos, cada uno de los cuales significa algo diferente para el navegador del cliente. Los dos tipos más comunes son las redirecciones temporales y las redirecciones permanentes.

Las redirecciones temporales (código de estado de respuesta 302 Encontrado) son útiles si una URL necesita ser servida temporalmente desde una ubicación diferente. Por ejemplo, si estás realizando mantenimiento en el sitio, es posible que desees usar una redirección temporal desde tu dominio a una página de explicación para informar a tus visitantes que volverás en breve.

Las redirecciones permanentes (código de estado de respuesta 301 Movido permanentemente), por otro lado, informan al navegador que debe olvidar completamente la dirección antigua y no intentar acceder a ella nunca más. Estas son útiles cuando tu contenido se ha movido permanentemente a una nueva ubicación, como cuando cambias de nombre de dominio.

Esta guía cubrirá una explicación más detallada de cómo implementar cada tipo de redireccionamiento en Nginx y pasará por algunos ejemplos para casos de uso específicos.

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • A server with Nginx installed and set up to serve your website(s). You can find some examples and instructions on the tutorials for Ubuntu 22.04, Debian, or CentOS.

Solución a simple vista

En Nginx, puedes lograr la mayoría de las redirecciones con la directiva integrada rewrite. Esta directiva está disponible de forma predeterminada en una instalación fresca de Nginx y se puede utilizar para crear redirecciones tanto temporales como permanentes. En su forma más simple, toma al menos dos argumentos: la antigua URL y la nueva URL.

Puedes implementar una redirección temporal con las siguientes líneas en la configuración de tu servidor:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/$ http://www.domain2.com redirect;
    . . .
}

Esta redirección instruye al navegador a dirigir todas las solicitudes de www.dominio1.com a www.dominio2.com. Sin embargo, esta solución solo funciona para una sola página, no para todo el sitio. Para redirigir más que una sola página, puedes usar la directiva rewrite con expresiones regulares para especificar directorios enteros en lugar de solo archivos individuales.

redirect coincide con patrones de expresiones regulares entre paréntesis. Luego, hace referencia al texto coincidente en el destino de la redirección usando la expresión $1, donde 1 es el primer grupo de texto coincidente. En ejemplos más complejos, los grupos coincidentes posteriores se les asignan números secuenciales.

Por ejemplo, si quisieras redirigir temporalmente cada página dentro de www.dominio1.com a www.dominio2.com, podrías usar lo siguiente:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

server {
    . . .
    server_name www.domain2.com;
    . . .
}

Por defecto, la directiva rewrite establece una redirección temporal. Si deseas crear una redirección permanente, puedes hacerlo reemplazando redirect con permanent al final de la directiva, así:

Permanent redirects
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

Vamos a ver algunos ejemplos específicos.

Ejemplo 1 — Cambiando a un Dominio Diferente

Si has establecido una presencia web y deseas cambiar tu dominio por una nueva dirección, lo mejor es no abandonar simplemente tu antiguo dominio. Los marcadores de tu sitio y los enlaces a tu sitio ubicados en otras páginas en Internet se romperán si tu contenido desaparece sin instrucciones al navegador sobre cómo encontrar su nueva ubicación. Cambiar de dominio sin redireccionar hará que tu sitio pierda tráfico de visitantes anteriores y enlaces más antiguos.

En este ejemplo, configuraremos una redirección desde el antiguo dominio llamado domain1.com hacia el nuevo llamado domain2.com. Utilizaremos redirecciones permanentes aquí porque el antiguo dominio será obsoleto y todo el tráfico debería dirigirse al nuevo dominio a partir de ahora.

Supongamos que tienes tu sitio web configurado para ser servido desde un único dominio llamado domain1.com ya configurado en Nginx de la siguiente manera:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    . . .
}

También asumiremos que ya estás sirviendo la futura versión de tu sitio web en domain2.com:

/etc/nginx/sites-available/domain2.com
server {
    . . .
    server_name domain2.com;
    . . .
}

Vamos a cambiar el archivo de configuración del bloque del servidor domain1.com para añadir una redirección permanente a domain2.com:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    rewrite ^/(.*)$ http://domain2.com/$1 permanent;
    . . .
}

Hemos añadido la mencionada redirección utilizando una directiva rewrite. La expresión regular ^/(.*)$ coincide con todo después de la barra / en la URL. Por ejemplo, http://domain1.com/index.html será redirigido a http://domain2.com/index.html. Para lograr la redirección permanente, simplemente añadimos permanent después de la directiva rewrite.

Nota: Recuerda probar tu configuración utilizando nginx -t y luego reiniciar Nginx después de realizar tus cambios.

Ejemplo 2 — Crear una Experiencia Persistente A Pesar de los Cambios en el Nombre de la Página

A veces, es necesario cambiar los nombres de páginas individuales que ya han sido publicadas y han recibido tráfico en tu sitio web. Cambiar solo el nombre causaría un error 404 No Encontrado para los visitantes que intentan acceder a la URL original, pero puedes evitar esto utilizando una redirección. Esto asegura que las personas que hayan marcado tus páginas antiguas o las hayan encontrado a través de enlaces desactualizados en los motores de búsqueda aún llegarán a la página correcta.

Supongamos que tu sitio web tenía dos páginas separadas para productos y servicios llamadas products.html y services.html respectivamente. Ahora, has decidido reemplazar esas dos páginas con una única página de ofertas llamada offers.html en su lugar. Configuraremos una redirección simple para products.html y services.html hacia offers.html.

Suponemos que tu sitio web está configurado de la siguiente manera:

Original server block configuration
server {
    . . .
    server_name example.com www.example.com;
    . . .
}

Configurar las redirecciones es tan simple como usar dos directivas de redirección.

Redirects added to the original configuration
server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

La directiva rewrite acepta la dirección original que debe ser redirigida así como la dirección de destino de una nueva página. Dado que el cambio aquí no es temporal, también usamos permanent en la directiva. Puedes usar tantas redirecciones como desees para asegurarte de que tus visitantes no vean errores 404 No Encontrado innecesarios al mover el contenido del sitio.

Conclusión

Ahora tienes el conocimiento para redirigir solicitudes a nuevas ubicaciones. Asegúrate de usar el tipo de redirección correcto, ya que un uso incorrecto de las redirecciones temporales puede afectar negativamente tu ranking en los motores de búsqueda.

Existen múltiples otros usos de las redirecciones HTTP, incluyendo forzar conexiones seguras SSL (es decir, utilizando https en lugar de http) y asegurarse de que todos los visitantes terminen únicamente en la dirección con el prefijo www. del sitio web.

Usar redirecciones correctamente te permitirá aprovechar tu presencia web actual mientras te da la capacidad de modificar la estructura de tu sitio según sea necesario. Si deseas aprender más sobre las formas en que puedes redirigir a tus visitantes, Nginx tiene una excelente documentación sobre el tema en las secciones del módulo de reescritura de la documentación oficial y publicación oficial en el blog sobre cómo crear redirecciones.

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-temporary-and-permanent-redirects-with-nginx