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 en un sitio web o a una URL externa.

En otras palabras, este conocido módulo de Apache le permitirá redirigir una URL a otra, que ilustraremos a través de ejemplos prácticos.

rojo

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, deberá cargarlo manualmente de la siguiente manera:

# a2enmod rewrite

Configurando Apache para usar el mod_rewrite Module

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 use 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 en cada host virtual en el que desee usar las reglas de reescritura.

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 te olvides de reiniciar Apache para que los cambios surtan efecto.

Esto puede ser útil si su sitio se diseñó originalmente utilizando ASP y luego se cambió a HTML5 . 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 en una página de error. Para realizar la prueba, creemos un archivo HTML simple denominado 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 dollar harán que la expresión regular coincida con cualquier cadena que comience con /default y termine con .aspx , respectivamente.

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 está sirviendo index.html en lugar de una página llamada default.aspx , agregue [R, L] al final de la regla de reescritura de la siguiente manera:

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

Aquí [R, L] hay dos banderas 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 hizo anteriormente.

En este artículo, explicamos cómo usar mod_rewrite para realizar la redirección interna. Manténgase atento a la próxima publicación en la que 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 la documentación de Apache 2.4 para obtener una lista completa de las banderas 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!

Todos los derechos reservados © Linux-Console.net • 2019-2021