.htaccess Page d’erreur personnalisée suite à une erreur de saisie .htpasswd

J’ai pas mal recherché sur le net pour voir comment personnaliser la page d’erreur qui apparait suite à une erreur de saisie dans la fenêtre authentification généré par un .htpasswd.

Au final, on trouve de nombreux articles sur l’authentification par .htpasswd et de nombreux articles sur la redirection suite à une erreur http mais très peu les deux en même temps 🙁

Comportement par défaut suite à une authentification erronée :

En général, le message d’erreur va ressembler à ça :

image

Mais impossible d’amener vers une page comme ça :

image

Comment rédiger le fichier .htaccess pour avoir une page d’erreur personnalisée :

On va utiliser la Directive FilesMatch pour pouvoir préciser le comportement du serveur suite à une erreur de saisie dans la pop up de connexion :

Fichier .htaccess

<FilesMatch "^(?!401\.php$).+">
AuthName "site protégée"
AuthType Basic
AuthUserFile "/path/to/.htpasswd"
Require valid-user
</FilesMatch>

ErrorDocument 401 /401.php

Qu’est ce ça veut dire ?

En entourant les lignes qui vont générer la demande d’authentification par FilesMatch ^(?!401\.php$).+, voici le comportement du serveur :

  • l’utilisateur souhaite accéder à la page toto.php du site, le .htaccess va lui demander un login et un mot de passe pour continuer
  • l’utilisateur fait une erreur dans la saisie, le serveur génére une erreur http 401
  • il va être redirigé vers la page personnalisée 401.php qui est n’est pas impactée par la demande d’authentification grâce à la condition mentionnée dans la Directive FileMatch
  • La Directive FileMatch permet de mettre en place une condition.
  • Si la Directive est absente, voilà le résultat que vous aurez :

image

  • Pour résumer, le fichier .htaccess veut dire : demande une authentification pour toutes les pages du site sauf la page 401.php
  • s’il y a une erreur lors de la saisie (erreur http 401), alors redirige l’utilisateur vers la page 401.php (qui ne nécessite pas d’authentification)

Où mettre les fichiers .htaccess et 401.php?

  • Pour le fichier .htaccess, il doit être mis à la racine du dossier à protéger, automatiquement tous les sous dossiers vont l’appeler et vérifier que le login et mot de passe sont conformes.
  • Pour le fichier 401.php, il peut être mis au même niveau ou dans un sous-dossier.

Astuce en +, autoriser un fichier .css et une image :

Fichier .htaccess

<FilesMatch "^(?!401\.php$).+">
AuthName "site protégée"
AuthType Basic
AuthUserFile "/path/to/.htpasswd"
Require valid-user
</FilesMatch>

ErrorDocument 401 /401.php