Este documento explica cómo el servidor HTTP Apache usa la URL de una solicitud para determinar la ubicación del sistema de archivos desde la cual entregar un archivo.
Módulos y directivas relacionados
Módulos relacionados | Directivas relacionadas |
---|---|
Raiz del documento
Al decidir qué archivo servir para una solicitud determinada, el comportamiento predeterminado de httpd es tomar la ruta URL de la solicitud (la parte de la URL que sigue al nombre de host y el puerto) y agregarla al final de la DocumentRoot
especificado en sus archivos de configuración. Por lo tanto, los archivos y directorios debajo del DocumentRoot
conforman el árbol de documentos básico que será visible desde la web.
Por ejemplo, si DocumentRoot
estaban configurados para /var/www/html
luego una solicitud de http://www.example.com/fish/guppies.html
daría como resultado el archivo /var/www/html/fish/guppies.html
siendo atendido al cliente solicitante.
Si se solicita un directorio (es decir, una ruta que termina con /
), el archivo servido desde ese directorio está definido por el DirectoryIndex
directiva. Por ejemplo, si DocumentRoot
se establecieron como se indicó anteriormente, y usted debía establecer:
DirectoryIndex index.html index.php
Entonces una solicitud de http://www.example.com/fish/
hará que httpd intente servir el archivo /var/www/html/fish/index.html
. En el caso de que ese archivo no exista, luego intentará servir el archivo /var/www/html/fish/index.php
.
Si ninguno de estos archivos existía, el siguiente paso es intentar proporcionar un índice de directorio, si mod_autoindex
está cargado y configurado para permitir eso.
httpd también es capaz de alojamiento virtual, donde el servidor recibe solicitudes para más de un host. En este caso, una diferente DocumentRoot
se puede especificar para cada host virtual, o alternativamente, las directivas proporcionadas por el módulo mod_vhost_alias
se puede utilizar para determinar dinámicamente el lugar apropiado desde el cual servir el contenido en función de la dirección IP o el nombre de host solicitados.
los DocumentRoot
La directiva se establece en el archivo de configuración del servidor principal (httpd.conf
) y, posiblemente, una vez por cada host virtual adicional que cree.
Archivos fuera de DocumentRoot
Con frecuencia, hay circunstancias en las que es necesario permitir el acceso web a partes del sistema de archivos que no se encuentran estrictamente debajo del DocumentRoot
. httpd ofrece varias formas diferentes de lograr esto. En los sistemas Unix, los enlaces simbólicos pueden traer otras partes del sistema de archivos bajo el DocumentRoot
. Por razones de seguridad, httpd seguirá enlaces simbólicos solo si el Options
la configuración para el directorio relevante incluye FollowSymLinks
o SymLinksIfOwnerMatch
.
Alternativamente, el Alias
La directiva mapeará cualquier parte del sistema de archivos en el espacio web. Por ejemplo, con
Alias "/docs" "/var/web"
la URL http://www.example.com/docs/dir/file.html
será servido desde /var/web/dir/file.html
. los ScriptAlias
La directiva funciona de la misma manera, con el efecto adicional de que todo el contenido ubicado en la ruta de destino se trata como CGI guiones.
Para situaciones en las que necesita flexibilidad adicional, puede utilizar el AliasMatch
y ScriptAliasMatch
directivas para hacer poderosas expresión regular emparejamiento y sustitución basados. Por ejemplo,
ScriptAliasMatch "^/~([a-zA-Z0-9]+)/cgi-bin/(.+)" "/home/$1/cgi-bin/$2"
mapeará una solicitud a http://example.com/~user/cgi-bin/script.cgi
al camino /home/user/cgi-bin/script.cgi
y tratará el archivo resultante como un script CGI.
Directorios de usuarios
Tradicionalmente en los sistemas Unix, el directorio de inicio de un usuario puede ser referido como ~user/
. El módulo mod_userdir
extiende esta idea a la web al permitir que se acceda a los archivos del directorio de inicio de cada usuario mediante URL como las siguientes.
http://www.example.com/~user/file.html
Por razones de seguridad, no es apropiado otorgar acceso directo al directorio de inicio de un usuario desde la web. por lo tanto, el UserDir
La directiva especifica un directorio debajo del directorio de inicio del usuario donde se encuentran los archivos web. Usando la configuración predeterminada de Userdir public_html
, la URL anterior se asigna a un archivo en un directorio como /home/user/public_html/file.html
dónde /home/user/
es el directorio de inicio del usuario como se especifica en /etc/passwd
.
También hay varias otras formas de Userdir
directiva que puede utilizar en sistemas donde /etc/passwd
no contiene la ubicación del directorio de inicio.
Algunas personas encuentran el símbolo “~” (que a menudo se codifica en la Web como %7e
) para ser incómodo y preferir usar una alternativa string para representar directorios de usuarios. Esta funcionalidad no es compatible con mod_userdir. Sin embargo, si los directorios de inicio de los usuarios están estructurados de forma regular, entonces es posible utilizar el AliasMatch
directiva para lograr el efecto deseado. Por ejemplo, para hacer http://www.example.com/upages/user/file.html
mapa para /home/user/public_html/file.html
, usa lo siguiente AliasMatch
directiva:
AliasMatch "^/upages/([a-zA-Z0-9]+)(/(.*))?$" "/home/$1/public_html/$3"
Redirección de URL
Las directivas de configuración discutidas en las secciones anteriores le dicen a httpd que obtenga contenido de un lugar específico en el sistema de archivos y lo devuelva al cliente. A veces, es deseable informar al cliente que el contenido solicitado se encuentra en una URL diferente e indicarle al cliente que realice una nueva solicitud con la nueva URL. Se llama redirección y es implementado por el Redirect
directiva. Por ejemplo, si el contenido del directorio /foo/
bajo la DocumentRoot
se mueven al nuevo directorio /bar/
, puede indicar a los clientes que soliciten el contenido en la nueva ubicación de la siguiente manera:
Redirect permanent "/foo/" "http://www.example.com/bar/"
Esto redirigirá cualquier ruta de URL que comience en /foo/
a la misma ruta de URL en el www.example.com
servidor con /bar/
sustituido para /foo/
. Puede redirigir a los clientes a cualquier servidor, no solo al servidor de origen.
httpd también proporciona un RedirectMatch
directiva para problemas de reescritura más complicados. Por ejemplo, para redirigir las solicitudes de la página de inicio del sitio a un sitio diferente, pero dejar todas las demás solicitudes en paz, utilice 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 de otro sitio, utilice lo siguiente:
RedirectMatch temp ".*" "http://othersite.example.com/startpage.html"
Proxy inverso
httpd también le permite traer documentos remotos al espacio URL del servidor local. Esta técnica se llama proxy inverso porque el servidor web actúa como un servidor proxy al obtener los documentos de un servidor remoto y devolverlos al cliente. Es diferente del proxy normal (directo) porque, para el cliente, parece que los documentos se originan en el servidor proxy inverso.
En el siguiente ejemplo, cuando los clientes solicitan documentos bajo el /foo/
directorio, el servidor recupera esos documentos del /bar/
directorio en internal.example.com
y los devuelve al cliente como si fueran del servidor local.
ProxyPass "/foo/" "http://internal.example.com/bar/" ProxyPassReverse "/foo/" "http://internal.example.com/bar/" ProxyPassReverseCookieDomain internal.example.com public.example.com ProxyPassReverseCookiePath "/foo/" "/bar/"
los ProxyPass
configura el servidor para obtener los documentos apropiados, mientras que el ProxyPassReverse
La directiva reescribe las redirecciones que se originan en internal.example.com
para que apunten al directorio apropiado en el servidor local. Del mismo modo, el ProxyPassReverseCookieDomain
y ProxyPassReverseCookiePath
reescribir las cookies establecidas por el servidor backend.
Sin embargo, es importante tener en cuenta que los enlaces dentro de los documentos no se volverán a escribir. Entonces, cualquier enlace absoluto en internal.example.com
resultará en que el cliente salga del servidor proxy y solicite directamente desde internal.example.com
. Puede modificar estos enlaces (y otro contenido) en una página a medida que se sirve al cliente mediante mod_substitute
.
Substitute "s/internal.example.com/www.example.com/i"
Para una reescritura más sofisticada de enlaces en HTML y XHTML, el mod_proxy_html
El módulo también está disponible. Le permite crear mapas de URL que deben reescribirse, de modo que se puedan manejar escenarios complejos de proxy.
Motor de reescritura
Cuando se requiere una sustitución aún más potente, el motor de reescritura proporcionado por mod_rewrite
puede ser útil. Las directivas proporcionadas por este módulo pueden utilizar características de la solicitud, como el tipo de navegador o la dirección IP de origen, para decidir desde dónde entregar el contenido. Además, mod_rewrite puede usar archivos o programas de bases de datos externos para determinar cómo manejar una solicitud. El motor de reescritura es capaz de realizar los tres tipos de asignaciones discutidas anteriormente: redireccionamientos internos (alias), redireccionamientos externos y proxy. Muchos ejemplos prácticos que emplean mod_rewrite se analizan en la documentación detallada de mod_rewrite.
Archivo no encontrado
Inevitablemente, se solicitarán URL para las que no se puede encontrar ningún archivo coincidente en el sistema de archivos. Esto puede suceder por varias razones. En algunos casos, puede ser el resultado de mover documentos de una ubicación a otra. En este caso, es mejor utilizar la redirección de URL para informar a los clientes de la nueva ubicación del recurso. De esta manera, puede asegurarse de que los marcadores y enlaces antiguos seguirán funcionando, aunque el recurso se encuentre en una nueva ubicación.
Otra causa común de errores de “Archivo no encontrado” es el error de escritura accidental de URL, ya sea directamente en el navegador o en enlaces HTML. httpd proporciona el módulo mod_speling
(sic) para ayudar con este problema. Cuando este módulo está activado, interceptará los errores de “Archivo no encontrado” y buscará un recurso con un nombre de archivo similar. Si se encuentra uno de esos archivos, mod_speling enviará una redirección HTTP al cliente informándole de la ubicación correcta. Si se encuentran varios archivos “cercanos”, se presentará al cliente una lista de alternativas disponibles.
Una característica especialmente útil de mod_speling es que comparará nombres de archivos sin respetar las mayúsculas y minúsculas. Esto puede ayudar a los sistemas donde los usuarios desconocen la naturaleza sensible a mayúsculas y minúsculas de las URL y el sistema de archivos Unix. Pero el uso de mod_speling para algo más que la corrección de URL ocasional puede generar una carga adicional en el servidor, ya que cada solicitud “incorrecta” es seguida por una redirección de URL y una nueva solicitud del cliente.
mod_dir
proporciona FallbackResource
, que se puede utilizar para asignar URI virtuales a un recurso real, que luego les sirve. Este es un reemplazo muy útil para mod_rewrite
al implementar un ‘controlador frontal’
Si todos los intentos de localizar el contenido fallan, httpd devuelve una página de error con el código de estado HTTP 404 (archivo no encontrado). La apariencia de esta página se controla con el ErrorDocument
directiva y se puede personalizar de manera flexible como se explica en el documento Respuestas de error personalizadas.
Otros módulos de mapeo de URL
Otros módulos disponibles para el mapeo de URL incluyen:
mod_actions
– Asigna una solicitud a un script CGI según el método de solicitud o el tipo de recurso MIME.mod_dir
– Proporciona un mapeo básico de una barra al final en un archivo de índice comoindex.html
.mod_imagemap
– Asigna una solicitud a una URL en función de dónde un usuario hace clic en una imagen incrustada en un documento HTML.mod_negotiation
– Selecciona un documento apropiado según las preferencias del cliente, como el idioma. o compresión de contenido.
Sección de Reseñas y Valoraciones
Recuerda algo, que tienes la opción de agregar una reseña si encontraste tu apuro en el momento concreto.