El módulo alias_module del servidor Apache

En el tema anterior vimos el uso del módulo rewrite_module para hacer una redirección 301. Allí se comentó que este módulo es para tareas más complejas por lo que en simples redirecciones es preferible usar las redirecciones de las directivas Redirect y RedirectMatch del módulo alias_module. Con ambas se consigue el mismo propósito pero esta última nos permite también usar expresiones regulares como hacíamos en el tema anterior con la directiva RewriteRule.

Pero además hay un aspecto importante. Con RewriteRule necesitamos que esté cargado el módulo rewrite_module. Y esta carga sólo puede hacerse en el archivo httpd.conf. Dado que este módulo tiene más potencialidades, es posible que en un alojamiento compartido esté desactivada y no consigamos que el administrador lo active. Pero es probable que el módulo alias_module si esté activado, especialmente porque también se usa para crear carpetas o ubicaciones virtuales, que nos permitirán, entre otras cosas, situar los recursos protegidos como los cgi-bin fuera de la carpeta raíz. Ya vimos como crear una carpeta virtual en el tema anterior con la directiva Alias para probar allí una redirección con RewriteRule.

En definitiva, podemos usar la directiva RedirectMatch en todo caso y es más, incluso aconsejable cuando se trata de redirecciones muy simples.

Ejemplo de redirección 301 con RedirectMatch

La directiva RedirectMatch hace exactamente lo mismo que Redirect pero nos permite usar expresiones regulares para filtrar las peticiones. Su estructura es la siguiente:

RedirectMatch [código de estado] patrón URL

En nuestro caso lo que queríamos era redireccionar todas las peticiones hechas a /xhtml-css/ a la nueva ubicación /temas/xhtml-css/. Se trata de un simple traslado de los documentos de esa carpeta a otra. En el archivo .htaccess ubicado en la carpeta raíz tendríamos entonces esta directiva:

RedirectMatch 301 ^/xhtml-css/(.*)$ /temas/xhtml-css/$1

Vemos que el código de estado es opcional, pero en este caso lo incluimos pues lo que estamos haciendo es una redirección 301 y así debe manejarlo el servidor y el navegador. Luego tenemos el patrón que funciona igual que lo que explicamos en el tema anterior. Aunque aquí hay una diferencia importante: en este caso si hay que poner la barra inicial que significa que esa carpeta xhtml-css está, o mejor dicho, estaba antes en la carpeta raíz. Con RedirectMatch no tenemos que preocuparnos por la directiva RewriteBase pues sólo es de aplicación para aquel módulo rewrite_module. Por último tenemos la URL a la que redigiremos en la nueva ubicación.

Aplicando este ejemplo con el navegador Chrome, desde la página de inicio del sitio en localhost, tecleamos en la barra de direcciones la ruta http://localhost/xhtml-css/formulario-html que ya no existe:

redirectmatch-1

Al aceptar esta ruta el navegador recibe la página redirigida http://localhost/temas/xhtml-css/formulario-html:

redirectmatch-2

En este proceso el usuario recibe la página solicitada y no percibe diferencia, a no ser que se fije en lo que pone la barra de direcciones.

Lo que se puede hacer con las reescrituras en Apache

En resumen, tanto con RewriteRule o RedirectMatch podemos empezar a redirigir peticiones. Pero por supuesto que aún hay mucho más que se puede hacer con las reescrituras de URL, especialmente con el módulo mod_rewrite, como puede ver en este enlace de Apache sobre una guía de reescritura que contiene ejemplos entre otros:

  • URL's canónicas para facilitar tarea a buscadores
  • Traslado de la carpeta raíz
  • Resolver el problema de la barra final en rutas de carpetas (las que apuntan a archivos index)
  • Traslado del sitio a otro servidor
  • Búsqueda de páginas en más de una carpeta
  • Configurar variables de entorno del servidor según partes de la URL
  • Redirigir a carpetas como si fueran dominios virtuales
  • Restricciones de acceso como bloqueo de robots, impedir que otros vinculen nuestras imagenes, bloquear ciertas IP, etc.

Y si queremos algo más avanzado podemos ver en el manual Apache una guía avanzada de reescritura. En definitiva, estas directivas tienen un campo de aplicación importante, que espero seguir tocando en el futuro.