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.