Advertisement
  1. Code
  2. Web Development

Apache: Alias y redirección

Scroll to top
Read Time: 8 min

Spanish (Español) translation by Steven (you can also view the original English article)

Es común que un cliente envíe una solicitud de un archivo que no existe en el servidor o existe en una ubicación diferente. Esto puede ocurrir por varias razones. Puedes mover tus archivos dentro del servidor (o a un servidor completamente diferente), o puedes querer presentar una estructura lógica de sistema de archivos a los clientes que se conectan.

Normalmente, estas acciones dan como resultado un mensaje de error, pero las capacidades de redirección y aliasing de Apache, disponibles gracias al módulo mod_alias, te permiten manejar estos escenarios dirigiendo a los clientes a la nueva ubicación del recurso.

mod_alias también te permite informar a los clientes que la URL solicitada es incorrecta.

Los alias permiten que el servidor tome una URL y la traduzca a otra diferente. Luego, entregan de manera transparente el nuevo recurso al cliente, sin siquiera darse cuenta de que se produjo ningún tipo de redirección. Esto puede resultar muy útil cuando se cambian los enlaces de tu sitio web a URL amigables.

Los alias también pueden acceder a archivos fuera de la raíz del documento público al mapear cualquier parte del sistema de archivos en el espacio web, haciéndolos visibles en la web, pero no a ciertas cuentas de shell y scripts CGI, por ejemplo. Por otro lado, a veces deseas informar al cliente de la nueva ubicación del contenido y pedirle que realice una nueva solicitud para esa ubicación. Aquí es donde entran en juego las directivas relacionadas con la redirección de Apache.


Directiva Alias

La directiva Alias toma una ruta URL y la sustituye sin problemas por una ruta de archivo o directorio en el sistema (es decir, asigna la URL de un recurso a su ubicación física en el sistema de archivos, independientemente de su ubicación):

Los alias también pueden acceder a archivos fuera de la raíz del documento público.

El ejemplo anterior asigna el prefijo URL /images/ al prefijo del directorio /ftp/public/images/; por lo que una solicitud a https://www.example-domain.com/images/example-image.jpg se traduce automáticamente a /ftp/public/images/example-image.jpg.

Ten en cuenta que, si incluyes un / al final en la ruta de la URL, el servidor requiere un / al final para expandir el alias. Por ejemplo, una ruta URL de /images no tendrá un alias en el ejemplo anterior. Asimismo, omitir la barra en la ruta de la URL requiere que también omitas la barra en la ruta del archivo.


Directiva AliasMatch

La directiva AliasMatch funciona de la misma manera que Alias, pero te permite usar expresiones regulares para hacer coincidir un patrón de URL con una ruta de archivo o directorio. La expresión regular proporcionada coincide con la URL solicitada:

Este ejemplo te permite hacer referencia simple y fácilmente a archivos de imagen desde cualquier subdirectorio directo bajo la ruta relativa del documento solicitado. El $1 se refiere al valor de la cadena de caracteres coincidente en la URL solicitada. Por lo tanto, una solicitud de www.example-site.com/some_dir/images/img1.jpg se asigna a /ftp/public/images/img1.jpg. Esto también te permite almacenar todas tus imágenes en un solo lugar, independientemente de dónde se acceda a ellas.

Una sutil diferencia entre Alias y AliasMatch es que Alias copia automáticamente cualquier parte adicional del URI al final de la ruta del archivo a la derecha. AliasMatch no lo hace.

En otras palabras, cambiar Alias a AliasMatch no tendrá el mismo efecto. Como mínimo, debes agregar ^ al principio de la expresión regular y $ al final, y agregar $1 al final del reemplazo. Por ejemplo, la siguiente declaración:

No es equivalente a:

Que envía todas las solicitudes que contienen /images/ en la URL a /ftp/public/images/. Para que AliasMatch logre los mismos resultados, debes utilizar lo siguiente:


Directiva ScriptAlias

La directiva ScriptAlias exhibe la misma funcionalidad que la directiva Alias, pero también marca el directorio de destino como una carpeta compatible con CGI. Es decir, Apache asume que todos los archivos contenidos dentro del directorio son scripts CGI, e intentará ejecutar esos archivos como scripts CGI cuando reciba una solicitud para uno de los archivos.

Los scripts CGI (Common Gateway Interface) son básicamente programas externos, independientes y de generación de contenido, que te permiten crear contenido dinámico para tu sitio web.

El ejemplo anterior provoca una solicitud para http://www.example-site.com/cgi-bin/some_cgi_script para marcar el directorio /usr/local/apache2/cgi-bin/ como un directorio de script CGI, por lo tanto, ejecutar el script /usr/local/apache2/cgi-bin/some_cgi_script. Esto tiene exactamente el mismo efecto que la siguiente configuración alternativa:


Directiva ScriptAliasMatch

La directiva ScriptAliasMatch se comporta de manera similar a ScriptAlias, excepto que acepta una expresión regular como URL de origen en lugar de una simple coincidencia de prefijo.


Directiva Redirect

mod_alias también te permite informar a los clientes que la URL solicitada es incorrecta, lo que hace que el cliente realice otra solicitud para un recurso diferente. Esto se logra mediante la directiva Redirect.

La directiva Redirect funciona de manera muy similar a la directiva Alias, excepto que asigna un prefijo de URL dado a una URL diferente (que es básicamente la razón por la que el cliente está al tanto de la redirección). También puede aceptar un argumento opcional status.

En el ejemplo anterior, una solicitud de ww.example-site.com/images/img1.gif redirigiría a http://www.another-example-site.com/images/img1.gif.

Si la URL de la solicitud viene con una cadena de caracteres de consulta, la consulta se deja intacta, a menos que la directiva Redirect especifique una URL de destino que especifique una nueva cadena de consulta.

Por ejemplo, una solicitud de www.example-site.com/images?img-name=1.gif se asignará a http://www.another-example-site.com/images?img-name=1.gif en el ejemplo anterior. Sin embargo, si cambiamos la regla a:

Luego, una solicitud de www.example-site.com/images?img-name=1.gif se asignará a http://www.another-example-site.com/images?q=new-value.

Los alias permiten que el servidor tome una URL y la traduzca a una URL diferente.

Al realizar una redirección, el servidor envía una respuesta HTTP con un código de estado específico para el tipo de redirección (a diferencia de 200 o 404, por ejemplo).

La directiva Redirect permite especificar uno de los siguientes códigos de estado (los nombres simbólicos correspondientes están entre corchetes) y, por lo tanto, devolverlo junto con la respuesta:

Los redireccionamientos se procesan antes que los alias, si se encuentran dentro del mismo contexto.

  • 301 (permanente): El recurso se ha movido permanentemente a una nueva ubicación. Los clientes con cachés y proxies deben actualizar sus datos para que apunten al nuevo URI, a menos que un encabezado de respuesta Cache-Control o Expires indique lo contrario. Este estado también le dice a los proxies que realicen automáticamente la redirección por su cuenta para solicitudes futuras sin volver al servidor.
  • 302 (temp): el recurso se ha movido temporalmente a una nueva ubicación. Los clientes con cachés y proxies NO necesitan actualizar sus datos, pero deben continuar usando la misma URL para solicitudes futuras, a menos que un encabezado de respuesta Cache-Control o Expires indique lo contrario. Este estado también le dice a los proxies que verifiquen con el servidor antes de realizar la redirección para futuras solicitudes.
  • 303 (ver otro): la respuesta se puede encontrar en otra URL y debe recuperarse mediante una solicitud GET, independientemente del método de solicitud original utilizado. Esto indica que el recurso ha sido reemplazado.
  • 410 (desaparecido): el recurso ya no está disponible; se ha eliminado de forma permanente.

Si se omite el argumento status, se asumirá un estado HTTP predeterminado 302 (redirección temporal).

Por supuesto, puedes usar cualquier estado HTTP (¡válido!), que no sean los cuatro enumerados anteriormente, pero, en ese caso, deberás usar los valores de código de estado correspondientes porque mod_alias solo define nombres simbólicos para los tipos de redirección anteriores. Si usas un código de estado que no está en el rango de 300-399, entonces se debe omitir el segundo argumento de URL (es decir, la URL de reemplazo).


Directiva RedirectMatch

RedirectMatch funciona de la misma manera que la directiva Redirect, pero, como probablemente adivinaste, utiliza una expresión regular en lugar de un prefijo como URL de origen. Esto te brinda un medio más flexible para hacer coincidir las URL.

Por ejemplo, para redirigir todas las solicitudes de imágenes GIF a otro servidor, puedes utilizar la siguiente regla:

Y, como Redirect, RedirectMatch te permite usar un argumento de estado para especificar el tipo de redirección. Dado que el ejemplo anterior no establece explícitamente un parámetro de estado, se asume una redirección temporal (302).

También tiene dos directivas más, a saber: RedirectPermanent y RedirectTemp, las cuales funcionan de la misma manera que Redirect permanente... y Redirect temporal..., respectivamente.


Orden de procesamiento de directiva

Para evitar resultados inesperados, es importante tener en cuenta que todos los redireccionamientos se procesan antes que los alias, si se encuentran dentro del mismo contexto (por ejemplo, el mismo contenedor <Directory> o <VirtualHost>).

Si un servidor recibe una solicitud que coincide con una directiva Redirect o RedirectMatch, aplicará esa redirección antes de procesar cualquier alias.

Esto significa que, si ya tienes configurados alias coincidentes, nunca tendrán la oportunidad de postularse, porque la redirección necesaria ya habrá ocurrido.

En segundo lugar, los alias y las redirecciones se aplican en el orden en que aparecen en los archivos de configuración del servidor (primero en entrar, primero en procesarse). Por esta razón, asegúrate de enumerar primero la regla más específica. Por ejemplo, la siguiente configuración:

Tiene un efecto diferente a:

Donde Alias /sub-dir1 /dir4 siempre coincidirá antes que Alias /sub-dir1/sub-dir2 /dir3.


Conclusión

Hoy, analizamos las capacidades y opciones que tienes con mod_alias, lo que te permite realizar fácil y rápidamente tareas simples de redireccionamiento y asignación de URL con un mínimo esfuerzo. Es una utilidad excelente y liviana que hace el trabajo sin problemas y con un consumo mínimo de recursos.

La próxima publicación de la serie revisará mod_rewrite, una herramienta muy poderosa y flexible utilizada para el manejo de URL. mod_rewrite te permite especificar un número ilimitado de reglas y condiciones, incluidas variables de servidor, variables de entorno, encabezados HTTP, búsquedas de bases de datos y mucho más para controlar la manipulación de URL en un nivel completamente diferente. ¡Manténte al tanto!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.