Búsqueda de sitios web

Cómo realizar la redirección interna con mod_rewrite en Apache


En este artículo y en el siguiente explicaremos cómo usar mod_rewrite para asignar ciertas solicitudes HTTP a otras páginas de un sitio web o a una URL externa.

Es decir, este conocido módulo de Apache te permitirá redirigir una URL a otra, lo cual ilustraremos mediante ejemplos prácticos.

Lectura sugerida: 5 consejos para mejorar el rendimiento de su servidor web Apache

NOTA: Los siguientes ejemplos suponen que está al menos algo familiarizado con las expresiones regulares compatibles con Perl (PCRE). Dado que ese tema está fuera del alcance de este artículo, consulte los documentos de Perl 5 versión 24.0 para obtener más detalles sobre PCRE.

Antes de continuar, asegúrese de que el módulo de reescritura esté cargado. Aunque este es el comportamiento predeterminado en CentOS y distribuciones similares, en Debian y derivados necesitarás cargarlo manualmente de la siguiente manera:

a2enmod rewrite

Configuración de Apache para utilizar el módulo mod_rewrite

Para simplificar, usemos el sitio predeterminado en un cuadro CentOS 7 (IP 192.168.0.100) para explicar cómo usar mod_rewrite ( DocumentRoot: /var/www/html, archivo de configuración: /etc/httpd/conf/httpd.conf).

Para que Apache utilice este módulo, agregue la siguiente línea al archivo de configuración:

RewriteEngine on

Es importante tener en cuenta que esta configuración no será heredada por los hosts virtuales en el mismo cuadro.

Por lo tanto, deberá agregar RewriteEngine para cada host virtual donde desee utilizar reglas de reescritura.

Redirección interna: asignar una URL a otra en el mismo host virtual

Una redirección interna es el ejemplo más simple de mod_rewrite. Si desea redirigir todas las solicitudes de default.aspx a index.html, agregue la siguiente línea (también conocida como regla de reescritura) en RewriteEngine en:

RewriteRule "^/default\.aspx$" "/index.html"

y no olvide reiniciar Apache para que los cambios surtan efecto.

Esto puede resultar útil si su sitio se diseñó originalmente utilizando ASP y luego se cambió a HTML5 simple. Los motores de búsqueda tendrán el archivo .aspx indexado pero ese archivo ya no existe.

En ese caso, deberá encontrar una manera de redirigir la solicitud para que sus posibles visitantes no se encuentren con una página de error. Para probar, creemos un archivo HTML simple llamado index.html dentro de /var/www/html con el siguiente contenido:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>New site</title>
  </head>
  <body>
	<h2>Default.aspx was here, but now it's index.html</h2>
  </body>
</html>

Los signos caret y dólar harán que la expresión regular coincida con cualquier cadena que comience con /default y termine con .aspx, respectivamente.

Lectura sugerida: Instale Mod_Pagespeed para acelerar el rendimiento de Apache hasta 10 veces

Ahora inicie su navegador y apúntelo a 192.168.0.100/default.aspx. Si todo sale como se espera, Apache debería servir index.html en su lugar.
Sin embargo, el usuario final seguirá viendo default.aspx en la barra de direcciones, lo que hará que el cambio sea totalmente transparente:

Si desea que la URL en la barra de direcciones muestre que el servidor al que realmente sirve index.html en lugar de una página llamada default.aspx, agregue [R, L] hasta el final de la regla de reescritura de la siguiente manera:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

Aquí [R,L] hay dos indicadores opcionales que indican que se debe emitir una redirección HTTP completa al navegador (R) y que no se deben procesar más reglas:

Observe cómo la barra de direcciones ahora muestra index.html, como se esperaba, en lugar de default.aspx como lo hacía antes.

Resumen

En este artículo explicamos cómo usar mod_rewrite para realizar la redirección interna. Estén atentos a la próxima publicación donde aprenderemos cómo redirigir a un recurso que se ha movido a un servidor diferente y cómo mostrar contenido personalizado según el navegador del usuario. Hasta entonces, consulte los documentos de Apache 2.4 para obtener una lista completa de los indicadores de reescritura disponibles.

Como siempre, no dude en utilizar el formulario de comentarios a continuación si tiene alguna pregunta o comentario sobre este artículo. ¡Esperamos con interés escuchar de usted!