Mapear en Apache 2

Raíz de documento

Al decidir qué archivo servir a una petición dada, el comportamiento de Apache consiste en tomar la ruta de la URL de la petición (la parte de la URL siguiente al nombre de host y número de puerto) y añadirla al final de la raíz de documento especificada en los archivos de configuración. Por tanto, los archivos y directorios bajo la raíz del documento constituyen el árbol de documentos que pueden ser vistos desde la web.

Además, Apache también soporta el Virtual Hosting, donde el servidor recibe la peticiones para más de un solo host. En este caso, una raíz de documento diferente puede ser especificada para cada host virtual; o, alternativamente, las directivas que provee el módulo mod_vhost_alias pueden ser usadas para determinar dinámicamente el lugar apropiado desde el que servir contenido basado en la petición mediante dirección IP o nombre de host.

raizdocumento.jpg

Ficheros fuera de la raíz de documento

Frecuentemente hay circunstancias donde es necesario permitir el acceso web a partes del sistema de ficheros que no están estrictamente bajo la raíz de documento. Apache ofrece varias formas diferentes para conseguir esto. Sobre sistemas Unix, enlaces simbólicos pueden poner otras partes del sistema de ficheros bajo la raíz de documento. Por razones de seguridad, Apache continuará con los enlaces simbólicos sólo si la configuración de Options incluye FollowSymLinks o SymLinksIfOwnerMatch.

Alternativamente, la directiva Alias mapeará cualquier parte del sistema de ficheros dentro del espacio web. Por ejemplo, con la sentencia

Alias /docs /var/web

la URL http://www.ejemplo.com/docs/dir/fichero.html será servido desde /var/web/dir/fichero.html. La directiva ScriptAlias funciona de la misma manera, con la característica adicional de que todo el contenido localizado en la ruta de destino es tratado como scripts CGI.

Para situaciones donde se requiere flexibilidad adicional, pueden usarse las directivas AliasMatch y ScriptAliasMatch para reforzar la expresión regular de igualar y sustituir. Por ejemplo,

ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+) /home/$1/cgi-bin/$2

mapeará una petición a http://ejemplo.com/~user/cgi-bin/script.cgi a la ruta /home/user/cgi-bin/script.cgi y tratará el archivo resultante como un script CGI.

Directorios de usuario

Tradicionalmente, en sistemas Unix, el directorio principal (home directory) de un usuario particular puede ser llamado ~user/. El módulo mod_userdir extiende esta idea a la web permitiendo archivos bajo el directorio principal de cada usuario para ser accedido usando URL’s como la siguiente:

http://www.example.com/~user/file.html

Por razones de seguridad, es inapropiado dar acceso directo desde la web a los directorios principales de los usuarios. Por lo tanto, la directiva UserDir especifica un directorio bajo el directorio principal del usuario donde los archivos web son localizados. Usando la configuración por defecto de UserDir public_html, la anterior URL se mapea a un archivo en un directorio como /home/user/public_html/file.html, donde /home/user/ es el directorio principal del usuario como el especificado en /etc/passwd.

Además, hay otras formas de usar la directiva UserDir, la cual se puede usar en sistemas donde /etc/passwd no contiene la localización del directorio principal (home directory).

Algunas personas encuentran el símbolo "~" (que en la web se codifica a menudo como %7e) incómodo, prefiriendo usar una alternativa para representar los directorios de usuario. Esta funcionalidad no está soportada por el módulo mod_userdir. No obstante, si los directorios principales de usuarios están estructurados de manera regular, entonces es posible usar la directiva AliasMatch para conseguir el efecto deseado. Por ejemplo, para mapear http://www.ejemplo.com/upages/user/file.html a /home/user/public_html/file.html, se usa la directiva AliasMatch de la siguiente manera:

AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*) /home/$1/public_html/$2

Redirección de URL

Las directivas de configuración tratadas en la anterior sección, le dicen a Apache cómo obtener el contenido desde un lugar específico en el sistema de ficheros y devolverlo al cliente (navegador web). A veces, en lugar de esto, es deseable informar al cliente de que la información solicitada está situada en una URL diferente, e indicarle cómo acceder a la nueva URL. A este proceso se le llama redirección, y está implementado por la directiva Redirect. Por ejemplo, si el contenido del directorio /foo/ bajo la raíz de documento se cambia a un nuevo directorio llamado /bar/, se puede informar al cliente de cómo solicitar el contenido en el nuevo directorio, de la siguiente manera:

Redirect permanent /foo/ http://www.ejemplo.com/bar/

Esto redirigirá cualquier ruta de URL de inicio en /foo/ a la misma ruta URL sobre el servidor www.ejemplo.com pero con /bar/ sustituyendo a /foo/. También se puede redirigir a los clientes a otro servidor distinto, no sólo al servidor de origen.

Apache, además, provee una directiva RedirectMatch para problemas de reescritura más complicados. Por ejemplo, para redirigir peticiones del sitio principal (home page) a un sitio diferente, pero descartando las demás peticiones, hay que usar la siguiente configuración:

RedirectMatch permanent ^/$ http://www.example.com/startpage.html

Alternativamente, para redirigir temporalmente todas las páginas de un sitio a una página en particular en otro sitio distinto, se usa lo siguiente:

RedirectMatch temp .* http://othersite.example.com/startpage.html

File Not Found (Fichero no encontrado)

Inevitablemente, hay veces en las que el documento solicitado no puede ser encontrado en el sistema de ficheros. Esto puede suceder por varias razones. En algunos casos, puede ser el resultado de cambiar de ubicación los documentos. En este caso, lo mejor para usar la redirección de URL’s es informar al cliente sobre la nueva localización del recurso solicitado. De esta forma, se puede asegurar que los viejos "bookmarks" (marcadores o "Favoritos") y enlaces continúen funcionando, incluso si el recurso está en una nueva ubicación.

Otra causa común de los errores "File Not Found" es la construcción accidental de URL’s malformadas, bien directamente en el navegador o en los enlaces HTML. Apache provee el módulo mod_speling para ayudar con este problema. Cuando este módulo es activado, interceptará los errores "File Not Found" y comprobará si existe algún recurso con un nombre similar. Si algún archivo es encontrado, mod_speling eviará una redirección HTTP al cliente informándole de la correcta localización. Si en este proceso se encuentra más de un archivo, una lista de alternativas disponibles será mostrada al cliente.

Una característica especialmente útil de mod_speling, es que comparará nombres de archivo sin tener en cuenta las mayúsculas y minúsculas. Esto puede ayudar a los sistemas donde los usuarios están desprevenidos de la escritura de mayúsculas y minúsculas de las URL’s y en el sistema de ficheros Unix. Pero hay que tener en cuenta que usando mod_speling más que para la corrección ocasional de URL’s, puede suponer una carga adicional para el servidor.

Si todos los intentos por localizar el contenido falla, Apache devuelve una página de error con el código HTTP de estado 404 (File Not Found). La apariencia de esta página puede ser controlada con la directiva ErrorDocument, pudiendo ser personalizada de diferentes formas.

« Apache 2

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License