Accueil | Recherche | News | Articles | Téléchargement | Forums | Commentaires | A propos
       
 
Hébergement mutualisé chez OVH

  Recherche
  Catégories

• Apache
• PHP
• Système
• Tomcat

  Webmestres

   Page de démarrage
    Ajouter aux favoris
    Les news sur
    votre site

  Dernières versions

Apache 2.2.8
Apache 2.0.63
Apache 1.3.41
PHP 4.4.7
PHP 5.2.4
MySQL 5.0.45
MySQL 4.1.22
MySQL 4.0.27
phpMyAdmin 2.11.0
Tomcat 5.5.20
Tomcat 4.1.34
Tomcat 3.3.2

  Derniers modules

mod_auth_bsd 1.2
mod_design 0.4
mod_ometer 1.2.0
mod_epp 1.0
mod_mono 0.3.6

  Statistiques

Apache
PHP  

  Documentation

Apache 1.3
Apache 1.3 VF
Apache 2.0
Tomcat 3
Tomcat 4
PHP
MySQL

  Liens

Apache
Apache Project
Jakarta Project
Liste des bugs
Apache Today
Apache Week
Apache Reference
Apache@Slashdot
Reference cards

PHP/MySQL
PHP
MySQL
PHP Index
PHP Team

Accès direct
Imprimer cet article
Version imprimable

Des pages d'erreur personnalisées avec Apache et PHP
23 juin 2002

Configuration d'Apache

Lorsque la requête HTTP du client Web est considérée comme une erreur par Apache, ou lorsqu'un problème survient suite à l'exécution de cette requête, Apache peut réagir de 4 façons différentes :

  • afficher le message d'erreur standard
  • afficher un message d'erreur personnalisé
  • rediriger l'utilisateur vers une URL locale afin de traîter le problème ou l'erreur
  • rediriger l'utilisateur vers une URL externe afin de traîter le problème ou l'erreur

Le premier comportement est celui par défaut d'Apache. Les autres comportements seront possibles au travers de la directive ErrorDocument.

La directive ErrorDocument

Celle-ci peut être défini au niveau du fichier httpd.conf (serveur principal, hôtes virtuels, répertoires), mais, et c'est cette possibilité qui intéressera la plupart d'entre vous, dans un fichier .htaccess.
Sa syntaxe est : ErrorDocument Code_d'Erreur message|URL

Afficher un message d'erreur personnalisé

Pour afficher un message d'erreur personnalisé, il suffit de le saisir au niveau du paramètre message, précédé d'un guillemet (symbole "). Ce guillement ne figurera pas dans le message affiché. Apache ajoutera également d'autres informations explicitant l'errreur.

Exemple
ErrorDocument 404 "Erreur 404 : La page n'existe pas !

Rediriger l'utilisateur vers une URL locale/externe

L'unique différence entre la redirection vers une URL locale ou externe réside dans la façon dont l'URL est écrite. Faire commencer l'URL par "/" indiquera une URL locale, alors que pour une URL externe, on fera précéder le chemin vers le document ou le script par "http://" et le nom du serveur.

Exemples
ErrorDocument 404 /404.html
ErrorDocument 404 /404.php
ErrorDocument 500 /cgi-bin/errorHandler.pl
ErrorDocument 401 http://geldenhu.free.fr/401.html
ErrorDocument 404 http://geldenhu.free.fr/404.php
ErrorDocument 403 http://geldenhu.free.fr/erreur.php

Attention toutefois que, lors de l'utilisation d'une directive ErrorDocument désignant une URL externe (donc commençant par "http://"), Apache émettra une requête de redirection au client (catégorie 3xx) pour lui indiquer l'emplacement du document. Ceci peut avoir pour effet de perturber les robots ainsi que certains clients particuliers qui vérifient la validité d'une URL en testant le code de retour de la requête.
Ajoutons également qu'en raison de la nature des mécanismes de l'authentification HTTP, l'utilisation de la directive ErrorDocument avec le code 401 (Accès non autorisé), nécessite de ne pas utiliser d'URL externe. Dans le cas contraire, suite au code de redirection émis, le client ne se verra pas présenter la demande d'authentification et les pages seront inaccessibles.

Note pour les utilisateurs d'Internet Explorer

Internet Explorer 5 et supérieur incluent des pages d'erreur standards présentées à l'internaute si le site Web ne propose pas de pages personnalisées OU si la taille de ces pages est inférieure à une certaine taille en octets (256 ou 512 selon le cas).

Pour contourner ce "problème", vous pouvez soit compléter la page d'erreur avec des commentaires HTML afin d'atteindre 512 octets, soit opter pour l'une des deux modifications suivantes dans Internet Explorer :
• Dans les options d'Internet Explorer, onglet "Avancés", décocher la case "Afficher des messages d'erreur HTTP simplifiés",
• Dans la base de registre, rechercher le dossier HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\ErrorThresholds. Vous trouverez alors plusieurs entrées correspondant à un code HTTP et la taille de page minimum attendue pour afficher la page du site plutôt que la page interne d'IE.

Référence : Description des messages d'erreur HTTP, Microsoft.

Plus loin dans la personnalisation...

Comme nous venons de l'évoquer, l'URL peut désigner aussi bien une page statique qu'un script "côté serveur" écrit avec PHP ou encore un CGI écrit en Perl. Cependant, cette possibilité sera d'autant plus intéressante que certaines informations concernant l'environnement et les raisons précises de l'erreur seront disponibles, dans le but de délivrer le message le plus clair possible.
Nous en avons rêvé, Apache l'a fait. Ainsi, les variables d'environnement CGI suivantes seront disponibles :

  • REDIRECT_HTTP_ACCEPT (type MIME acceptés par le client)
  • REDIRECT_HTTP_USER_AGENT (description du navigateur client)
  • REDIRECT_PATH (chemin de recherche des binaires sur le serveur)
  • REDIRECT_REMOTE_ADDR (adresse IP du client)
  • REDIRECT_REMOTE_HOST (nom qualifié du client si disponible)
  • REDIRECT_SERVER_NAME (nom qualifié ou adresse IP du serveur)
  • REDIRECT_SERVER_PORT (port TCP/IP utilisé par le serveur pour "écouter" les requêtes)
  • REDIRECT_SERVER_SOFTWARE (description du serveur HTTP utilisé)
  • REDIRECT_URL (URL ayant conduit à l'URL actuelle)
  • REDIRECT_QUERY_STRING (paramètres de formulaire passés via l'URL)
  • REDIRECT_STATUS (code HTTP du statut)

Plusieurs éléments clés sont à prendre en compte :

  • toutes les variables sont préfixées par la chaîne "REDIRECT_",
  • ces variables n'existeront que si elles existaient sous leur forme non préfixée préalablement au traitement de l'erreur,
  • les variables REDIRECT_URL et REDIRECT_STATUS seront quant à elles toujours renseignées ; REDIRECT_QUERY_STRING sera vide à moins que des paramètres soient passés au script/CGI via l'URL de redirection,
  • aucune des deux variables précédemment citées ne sera initialisée si le document d'erreur est le résultat d'une redirection externe, c'est-à-dire débutant par "http://". Ceci est valable même si le site cible est le même que le site d'origine de la redirection.

Nous allons maintenant étudier comment utiliser au mieux la directive ErrorDocument et cet environnement CGI au travers de PHP.



Copyright © 2001-2004 M.Geldenhuys - Tous droits réservés