Les fichiers .htaccess sont des fichiers de configuration des serveurs web Apache. Ils peuvent être placés dans n'importe quel répertoire du site web et peuvent être modifiés alors que le serveur est en cours d'exécution.
On peut les utiliser pour modifier les droits d'accès, créer des redirections, écrire des messages d'erreur personnalisés, associer les extensions de fichier à des types
MIME, etc.
Voici quelques cas concrets d'utilisation de ce fichier pour rendre un site plus “professionnel”. Je ne vais pas m'étendre sur tous les cas de figure, mais surtout sur ceux que je pratique régulièrement.
Les messages d'erreurs peuvent être personnalisés. Par exemple, il est fortement conseillé de prévenir un visiteur qui fait fausse route si la page n'existe pas, ou encore s'il n'a pas le droit d'atteindre une page protégée.
ErrorDocument 404 /erreur_404.html
Dans certains cas, il m'arrive de forcer un retour à la page de démarrage en mettant dans mon fichier erreur_404.html :
<html>
<head>
<title>Page inexistante (erreur 404)</title>
<meta http-equiv="refresh" content="0; url=/index.php">
</head>
<body>
</body>
</html>
Si vous avez suivi mon idée, on peut même aller plus loin en mettant directement dans le fichier .htaccess :
ErrorDocument 404 /index.php
La conception du site ledruide.net a commencé en septembre 2000. Entre temps, il y a eu de multiples changements de répertoires. Il a donc fallu trouver un système pour ne pas bloquer un éventuel visiteur qui arriverait par un lien périmé (favoris, moteur de recherche).
Le principe consiste à mettre un code de redirection.
De manière générale, il ne faut pas surcharger le fichier .htaccess. Il faut se rappeler qu'il est lu à chaque chargement d'une page. Il est donc nécessaire de faire un ménage régulier de ses redirections.
Exemple de redirections :
##################################################
# Redirections
#
# Sous domaines existants :
# * http://archives.ledruide.net
# * http://dev.ledruide.net
# * http://wiki.ledruide.net
# Redirections permanentes vers les autres sous-domaines
RedirectPermanent /dev http://dev.ledruide.net
RedirectPermanent /wiki http://wiki.ledruide.net
# Redirections permanentes suite modification offre 60GP -> 300GP
#RedirectPermanent /dotclear http://www.ledruide.net/blog
RedirectPermanent /images http://www.ledruide.net/files/images
RedirectPermanent /biblio http://archives.ledruide.net/biblio
Cette partie est la plus “magique”. Elle permet de transformer une adresse du genre :
http://www.mon-site.com/message.php?id=ma-page
en une autre plus agréable à l'oeil et pour les moteurs de recherches :
http://www.mon-site.com/ma-page.html
Malheureusement, une partie des hébergeurs gratuits ne permettent pas de faire de la translation d'adresse.
Exemple appliqué à ce wiki (dokuwiki) :
RewriteEngine on
RewriteBase /
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L]
RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?id=$1 [QSA,L]
Décortiquons un peu le résultat :
RewriteEngine on : active le mode transformation
RewriteBase / : emplacement où l'on commence les changements1)
Ici le code le plus important :
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L]
En clair, cela donne :
RewriteRule CeQueCaVaAfficher leCodeInterneDeLaPage
^ : on prend le début de la ligne
$ : on prend la fin de la ligne
(.*) : on affiche le résultat donné par $1
## make sure nobody gets the htaccess files
<Files ~ "^[\._]ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
Certaines personnes se permettent de faire des liens de vos images à partir de votre site. Cela peut induire une augmentation importante de votre bande passante.
Pour éviter ce phénomène, il faut interdire l'affichage de vos images à tout ce qui n'est pas votre site. On obtient ceci :
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?nomdemonsite.com(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|jpg)$ - [F,NC]
Nous avons vu qu'avec ses petites études, on pouvait faire des choses très sympathiques grâce au fichier .htaccess.
Il y a encore plein de choses à en dire, puisqu'il est aussi possible de filtrer les adresses IP pour permettre entre autres de bannir un visiteur, de sécuriser des accès, d'ajouter des informations et de remplacer des icônes quand on affiche une liste des fichiers, etc.
Si le sujet vous intéresse encore, je vous invite donc à poursuivre vos recherches en consultant ses quelques liens connexes :