Serveur Apache HTTP Version 2.0
Il est possible � un administrateur Apache de configurer les r�ponses d'Apache dans les cas o� des erreurs ou probl�mes se pr�sentent.
Des r�ponses param�trables peuvent �tre d�finies pour �tre activ�es au cas o� le serveur d�tecterait une erreur ou un probl�me.
Quand un script plante et g�n�re une r�ponse "500 Server Error", sa r�ponse peut �tre remplac�e par un message plus convivial, ou par une redirection vers une autre URL (locale, ou sur un autre serveur).
NCSA httpd 1.3 renvoyait un message d'erreur insipide qui ne pr�sentait le plus souvent aucun sens ni � l'utilisateur, ni dans les journaux d'enregistrement sur des sympt�mes causant le plantage.
Le serveur peut �tre param�tr� pour :
La redirection vers une autre URL peut �tre utile, mais seulement si des informations peuvent �tre envoy�es pour expliquer/enregistrer l'erreur ou le probl�me plus clairement.
Pour y parvenir, Apache d�finit de nouvelles variables d'environnement CGI :
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
image/jpeg
REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
9000/712)
REDIRECT_PATH=.:/bin:/usr/local/bin:/etc
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=ooh.ahhh.com
REDIRECT_SERVER_NAME=crash.bang.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/0.8.15
REDIRECT_URL=/cgi-bin/buggy.pl
Notez que le pr�fixe REDIRECT_
est pr�sent pour toutes
ces variables d'environnement.
Au minimum, REDIRECT_URL
et
REDIRECT_QUERY_STRING
seront pass�es � la nouvelle
URL (en supposant qu'il s'agisse d'un script CGI ou d'un
include CGI). Les autres variables ne sont d�finies que si
elles existaient avant l'apparition du probl�me ou de l'erreur.
Aucune de ces variables ne sera
d�finie si votre directive ErrorDocument
entra�ne une redirection vers un serveur externe ;
tout ce qui commence par http:
est consid�r� comme
une redirection externe, y compris si cela pointe vers le
serveur local.
Il est possible d'utiliser la directive
ErrorDocument
dans les fichiers
.htaccess si AllowOverride
est
param�tr�e pour le permettre.
Voici quelques exemples :
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 "Sorry, our script crashed. Oh dear"
ErrorDocument 500 http://xxx/
ErrorDocument 404 /Lame_excuses/not_found.html
ErrorDocument 401 /Subscription/how_to_subscribe.html
La syntaxe � utiliser est :
ErrorDocument <code-�-3-chiffres> <action>
o� l'action peut d�signer :
Le fonctionnement d'Apache vis-�-vis des redirections a �t� modifi� afin que les nouvelles variables d'environnement soient disponibles pour un script ou un server-include.
Les variables CGI standard �taient pass�es au script sur lequel pointe la redirection. Aucune indication sur la provenance de la redirection n'�tait fournie.
Une s�rie de nouvelles variables d'environnement est
initialis�e pour �tre pass�e au script sur lequel pointe
la redirection. Chacune de ces variables est munie du pr�fixe
REDIRECT_
. Les variables d'environnement
REDIRECT_
sont cr��es � partir des variables
d'environnement "normales", telles qu'existant avant la
redirection, mais simplement renomm�es au moyen du pr�fixe
REDIRECT_
; ainsi par exemple HTTP_USER_AGENT
devient REDIRECT_HTTP_USER_AGENT
. En plus de ces
nouvelles variables, Apache d�finit REDIRECT_URL
et REDIRECT_status
pour aider le script �
comprendre d'o� il a �t� appel�. L'URL d'origine et l'URL
redirig�e sont toutes deux ajout�es dans le journal "access".
Si ErrorDocument
pr�cise une redirection
locale vers un script CGI, ce script devrait inclure un
champ "Status:
" dans son en-t�te de transmission
afin d'assurer que le client re�oive bien le code d'erreur et
puisse comprendre ce qui l'a caus�. Par exemple, un script
Perl ErrorDocument pourrait inclure quelque chose comme :
...
print "Content-type: text/html\n";
printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
...
Un script d�di� � la gestion d'une erreur donn�e,
telle que 404 Not Found
, peut bien s�r
utiliser le code sp�cifique d'erreur et le texte associ�.
Notez que le script doit envoyer l'en-t�te
Status:
appropri�e (comme par exemple
302 Found
), si la r�ponse contient un en-t�te
Location:
(pour g�n�rer la redirection cot� client).
Sans cet en-t�te Status:
, Location:
n'aura
pas d'effet.