Ce document explique comment le serveur HTTP Apache utilise l'URL contenue dans une requête pour déterminer le noeud du système de fichier à partir duquel le fichier devra être servi.
La méthode par défaut de httpd pour déterminer quel fichier servir pour
une requête donnée, consiste à extraire le chemin du fichier de la requête
(la partie de l'URL qui suit le nom d'hôte et le port), puis de l'ajouter
à la fin de la valeur de la directive
Par exemple, si la directive
/var/www/html
, une requête pour
http://www.example.com/fish/guppies.html
retournera le
fichier /var/www/html/fish/guppies.html
au client.
httpd supporte aussi les Hôtes virtuels,
ce qui lui permet de traiter des requêtes pour plusieurs hôtes.
Dans ce cas, un
La directive httpd.conf
), mais peut aussi être redéfinie pour chaque
Hôte virtuel supplémentaire que vous avez créé.
Il existe de nombreuses circonstances pour lesquelles il est nécessaire
d'autoriser l'accès web à des portions du système de fichiers qui ne se
trouvent pas dans l'arborescence FollowSymLinks
ou SymLinksIfOwnerMatch
.
Une autre méthode consiste à utiliser la directive
l'URL http://www.example.com/docs/dir/file.html
correspondra au fichier /var/web/dir/file.html
. La
directive
Pour les situations qui nécessitent plus de flexibilité, vous disposez
des directives
fera correspondre une requête du style
http://example.com/~user/cgi-bin/script.cgi
au chemin
/home/user/cgi-bin/script.cgi
, et traitera le fichier résultant
comme un script CGI.
Sur les systèmes Unix, on peut traditionnellement faire référence
au répertoire personnel d'un utilisateur particulier à l'aide de
l'expression ~user/
.
Le module
Pour des raisons de sécurité, il est déconseillé de permettre un accès
direct à un répertoire home d'utilisateur depuis le web. A cet effet, la
directive Userdir public_html
, l'URL ci-dessus correspondra à un fichier
dont le chemin sera du style
/home/user/public_html/file.html
où
/home/user/
est le répertoire home de l'utilisateur tel qu'il
est défini dans /etc/passwd
.
La directive Userdir
met à votre disposition de nombreuses
formes différentes pour les systèmes où /etc/passwd
ne
spécifie pas la localisation du répertoire home.
Certains jugent le symbole "~" (dont le code sur le web est souvent
%7e
) inapproprié et préfèrent utiliser une chaîne de
caractères différente pour représenter les répertoires utilisateurs.
mod_userdir ne supporte pas cette fonctionnalité. Cependant, si les
répertoires home des utilisateurs sont structurés de manière rationnelle,
il est possible d'utiliser la directive
http://www.example.com/upages/user/file.html
à
/home/user/public_html/file.html
, utilisez la directive
AliasMatch
suivante :
Les directives de configuration décrites dans les sections précédentes
demandent à httpd d'extraire un contenu depuis un emplacement spécifique
du système de fichiers
et de la retourner au client. Il est cependant parfois
souhaitable d'informer le
client que le contenu demandé est localisé à une URL différente, et de
demander au client d'élaborer une nouvelle requête avec la nouvelle URL.
Ce processus se nomme redirection et est implémenté par la
directive /foo/
sous
/bar/
, vous pouvez demander aux clients
de le requérir à sa nouvelle localisation comme suit :
Ceci aura pour effet de rediriger tout chemin d'URL commençant par
/foo/
vers le même chemin d'URL sur le serveur
www.example.com
en remplaçant /foo/
par
/bar/
. Vous pouvez rediriger les clients non seulement sur le
serveur d'origine, mais aussi vers n'importe quel autre serveur.
httpd propose aussi la directive
De même, pour rediriger temporairement toutes les pages d'un site vers une page particulière d'un autre site, utilisez ce qui suit :
httpd vous permet aussi de rapatrier des documents distants dans l'espace des URL du serveur local. Cette technique est appelée mandataire inverse ou reverse proxying car le serveur web agit comme un serveur mandataire en rapatriant les documents depuis un serveur distant puis les renvoyant au client. Ceci diffère d'un service de mandataire usuel (direct) car, pour le client, les documents semblent appartenir au serveur mandataire inverse.
Dans l'exemple suivant, quand les clients demandent des documents situés
dans le répertoire
/foo/
, le serveur rapatrie ces documents depuis le répertoire
/bar/
sur internal.example.com
et les renvoie au client comme s'ils appartenaient au serveur local.
La directive internal.example.com
de telle manière qu'elles ciblent le
répertoire approprié sur le serveur local. De manière similaire, les directives
Il est important de noter cependant, que les liens situés dans les documents
ne seront pas réécrits. Ainsi, tout lien absolu sur
internal.example.com
fera décrocher le client
du serveur mandataire et effectuer sa requête directement sur
internal.example.com
. Vous pouvez modifier ces liens (et
d'utres contenus) situés dans la page au moment où elle est envoyée au
client en utilisant le module
En outre, un module tiers mod_proxy_html permet de réécrire les liens dans les documents HTML et XHTML.
Le moteur de réécriture
Inévitablement, apparaîtront des URLs qui ne correspondront à aucun fichier du système de fichiers. Ceci peut arriver pour de nombreuses raisons. Il peut s'agir du déplacement de documents d'une localisation vers une autre. Dans ce cas, le mieux est d'utiliser la redirection d'URL pour informer les clients de la nouvelle localisation de la ressource. De cette façon, vous êtes sur que les anciens signets et liens continueront de fonctionner, même si la ressource est déplacée.
Une autre cause fréquente d'erreurs "File Not Found" est l'erreur de
frappe accidentelle dans les URLs, soit directement dans le navigateur,
soit dans les liens HTML. httpd propose le module
mod_speling possède une fonctionnalité particulièrement utile : il compare les noms de fichiers sans tenir compte de la casse. Ceci peut aider les systèmes où les utilisateurs ne connaissent pas la sensibilité des URLs à la casse et bien sûr les systèmes de fichiers unix. Mais l'utilisation de mod_speling pour toute autre chose que la correction occasionnelle d'URLs peut augmenter la charge du serveur, car chaque requête "incorrecte" entraîne une redirection d'URL et une nouvelle requête de la part du client.
Si toutes les tentatives pour localiser le contenu
échouent, httpd
retourne une page d'erreur avec le code de statut HTTP 404
(file not found). L'apparence de cette page est contrôlée à l'aide de la
directive
Les autres modules disponibles pour la mise en correspondance des URLs sont :
index.html
.