A quoi sert le fichier .htaccess et comment le modifier ?


Vous avez peut-être déjà entendu parler du fichier .htaccess dans un tuto... ou peut-être avez-vous croisé le nom de ce fichier en accédant au serveur sur lequel est stocké votre site web. Mais à quoi sert-il exactement ? Est-il indispensable ? Peut-on le modifier et comment ?

Dans cet article, je vous propose de découvrir le fichier .htaccess : comment le créer, le modifier, où le trouver sur WordPress, à quoi il sert, autant d'informations qui pourraient vous être utiles pour comprendre l'essentiel sur le sujet !

Le fichier .htaccess, c'est quoi ?

Sur Internet, les fichiers de votre site sont stockés sur un serveur, que je compare parfois à une maison de location :

  • Dans une maison, un propriétaire vous accorde un espace où vous pouvez entreposer vos affaires et qui vous permet d'avoir "pignon sur rue", d'avoir une adresse ;
  • Sur le web, un hébergeur vous loue un espace où vous pouvez stocker des fichiers afin de les mettre à disposition d'autres utilisateurs via une adresse, celle de votre site.

Tout comme il existe différents types de maisons, il existe différents types de serveurs web. Citons notamment Apache, Nginx et IIS qui représentent à eux trois plus de 95% du marché, Apache étant le plus utilisé et celui qui va nous intéresser aujourd'hui.

Un serveur doit être paramétré pour bien fonctionner... On peut le faire en touchant directement aux fichiers de configuration mais ce n'est pas à la portée de tout le monde et c'est souvent impossible quand votre site est hébergé en mutualisé (c'est-à-dire que plusieurs sites se partagent un même serveur). On peut aussi le faire de manière décentralisée, et c'est à ça que sert le fichier .htaccess sur Apache.

En résumé, le fichier .htaccess est un fichier de configuration qui permet de contrôler certains paramètres d'un serveur Apache.

A quoi sert le fichier .htaccess ? 10 utilisations

Vous allez me dire que vous ne voyez pas bien l'intérêt de toucher à la configuration d'un serveur. Alors, parlons plus concrètement de 10 usages concrets du fichier .htaccess :

1. Faire des redirections sur un site

Vous avez besoin de rediriger un groupe de pages vers un autre, de rediriger un site en http vers sa variante en https, ou un nom de domaine sans www vers sa version avec www ? C'est possible avec le fichier .htaccess.

Apache propose un module baptisé "mod_rewrite", qui permet de réécrire les adresses de certaines pages web. En utilisant ce module par le biais du htaccess, vous pouvez modifier des adresses de pages, des extensions de fichiers, rediriger les internautes vers un serveur proche de leur localisation géographique, etc.

Exemple de code pour rediriger un visiteur de la version sans www vers la version avec www :

RewriteEngine On
RewriteCond %{HTTP_HOST} ^monsite.com
RewriteRule (.*) https://www.monsite.com/$1 [R=301,L]

2. Protéger certaines pages par un mot de passe

Vous souhaitez empêcher les internautes d'accéder à une partie de votre site (un répertoire entier par exemple, ou la version du site sur laquelle vous faites des tests) sans entrer un mot de passe ? Là encore, vous pouvez le faire grâce au .htaccess.

Cet article par exemple vous expose la méthode plus en détail.

3. Créer des pages d'erreur personnalisées

Vous pouvez également créer des pages d'erreur sur mesure, par exemple une page 404 personnalisée, et utiliser le .htaccess pour qu'elles soient utilisées à la place des pages d'erreur standard.

Exemple de code pour définir une page 404 sur mesure :

RewriteEngine on
ErrorDocument 404   https://www.monsite.com/mapage404.php

Il faut bien sûr adapter l'URL à l'emplacement où vous avez créé votre page 404 personnalisée.

4. Dissimuler certains fichiers

Dans mon article sur la sécurité WordPress, j'utilise le fichier .htaccess pour masquer l'emplacement réel de l'accès à l'administration du site en le remplaçant par autre chose.

5. Bloquer des adresses IP ou des plages d'adresses IP

Si vous souhaitez exclure certains indésirables, vous pouvez utiliser le .htaccess pour exclure des adresses IP (un identifiant unique qui permet de repérer chaque machine sur le web à un instant t).

Exemple de code pour bloquer l'adresse IP précise 192.168.123.228 et toutes les adresses commençant par 243.156.789. :

order allow,deny
deny from 192.168.123.228
deny from 243.156.789.
allow from all

6. Bloquer des robots indésirables

Vous pouvez également bloquer certains robots qui circulent sur le web dotés de mauvaises intentions (spammer, aspirer le contenu du site, etc).

Exemple de code pour bloquer des robots indésirables :

<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent "^BuzzBot.*" spambot
SetEnvIfNoCase User-Agent "^ExtractorPro.*" spambot
Order allow,deny
Allow from all
Deny from env=spambot
</IfModule>

7. Décourager le hotlinking

Le hotlinking désigne le fait qu'au lieu de mettre en ligne certaines ressources sur leur propre site web, des gens utilisent les vôtres. Le plus courant est le hotlinking d'images : voyant une image sympa sur votre site, une personne se sert et utilise le lien de votre image pour la poster sur son propre site.

Pourquoi est-ce un problème ? Parce qu'à chaque fois que quelqu'un va consulter ce site tiers, il va venir "pomper des ressources" chez vous puisque le lien va chercher l'image sur votre serveur.

Le .htaccess permet de bloquer cette pratique... ou de remplacer les fichiers ainsi "volés" par une alternative. A mes débuts sur le web, il est possible que j'aie ainsi remplacé les images concernées par le hotlinking par des contenus pour adultes (hum). Sur mon site, tout s'affichait normalement... mais dès que quelqu'un piquait une image pour la mettre sur son propre site, elle était remplacée par un autre visuel très peu catholique :D

Exemple de code contre le hotlinking :

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?monsite.com/.*$ [NC]
RewriteRule \.(gif|jpg|js|css)$ - [F]

8. Gérer la mise en cache des ressources

Le .htaccess permet de déterminer la manière de "mettre en mémoire" (mettre en cache) certaines ressources, certains types de fichiers par exemple, afin qu'ils ne soient pas chargés systématiquement à chaque connexion. La mise en cache permet aux pages de se charger plus vite et est donc un outil important à utiliser en matière de performance web.

Exemple de code pour mettre en cache certaines ressources pendant une durée définie :

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 7200 seconds"
ExpiresByType image/jpg "access plus 2592000 seconds"
ExpiresByType text/css "access plus 2592000 seconds"
ExpiresByType text/javascript "access plus 2592000 seconds"
</IfModule>

9. Définir le type MIME pour certains types de fichiers

Il peut arriver qu'un serveur n'arrive pas à gérer correctement certains types de fichiers, possédant certaines extensions. Or, la plupart du temps, un navigateur web ne s'appuie pas sur l'extension mais sur le type MIME pour décider comment traiter un fichier. Vous pouvez justement le spécifier via le .htaccess.

Exemple de code pour ajouter un type MIME :

AddType video/mp4

10. Empêcher de lister le contenu de certains répertoires

En général, un serveur bloque par défaut la possibilité de lister le contenu d'un répertoire précis. Par exemple, les images que j'ai mises en ligne sur le blog en décembre 2022 sont rangées dans ce dossier :

https://www.notuxedo.com/wp-content/uploads/2022/12/

Quelqu'un qui tape l'adresse de ce dossier n'est pourtant pas en mesure de lister les images qu'il contient. Si votre serveur n'a pas ce comportement par défaut, le .htaccess peut vous permettre d'interdire le listing du contenu des répertoires.

Exemple de code pour interdire le listing de tous les types de fichiers :

IndexIgnore *

Comme vous pouvez le constater, il existe donc de multiples avantages à utiliser ce fichier. Certains sont assez techniques mais d'autres peuvent vous être très utiles dans la gestion courante de votre site.

Quelles sont les limites du fichier .htaccess ?

La liste n'est pas exhaustive mais voici quelques limites de ce fichier :

  • Il n'est utilisable que sur un serveur Apache mais n'est pas universellement exploitable sur tous les types de serveurs web.
  • Son usage reste restreint à de petites modifications et il ne peut pas forcément répondre à tous vos besoins de configuration.
  • La moindre erreur sur un fichier .htaccess est lourde de conséquences et peut générer une erreur 500 sur le site.
  • En cas d'erreur, il n'est pas évident de savoir exactement d'où elle provient, contrairement à certains langages informatiques qui vont vous afficher des messages d'erreur relativement clairs.
  • Le fichier .htaccess a un périmètre d'action bien défini : il s'applique au répertoire dans lequel il est placé et à ses sous-répertoires. Cela peut être un obstacle si vous avez besoin d'agir sur un périmètre différent.
  • Ca reste une configuration "décentralisée" qui ne vous donnera pas le même pouvoir d'action sur le serveur que si vous touchiez directement à la configuration de celui-ci.
  • Le .htaccess n'est pas à l'abri de failles de sécurité.
  • Enfin, s'il est trop chargé, il peut causer des problèmes de performance. De manière générale, .htaccess est parfois décrié comme étant un "palliatif" à une configuration plus propre.

Comment créer et modifier un fichier .htaccess et où le placer ?

Un fichier .htaccess se place dans le répertoire le plus haut où vous souhaitez appliquer les règles. Autrement dit, si vous voulez appliquer des règles à tout le site, il faut le mettre à la racine du site (dans un dossier qui s'appelle en général /public_html/ ou /www/ chez les hébergeurs). Si vous utilisez WordPress, le .htaccess peut donc être placé au même niveau que les répertoires wp-admin, wp-content et wp-includes.

Si vous souhaitez appliquer les règles uniquement à un sous-dossier précis, vous placerez alors le .htaccess dans le sous-dossier en question. Dans ce cas, il faut bien veiller à ce qu'il n'y ait pas de conflit avec un autre .htaccess situé dans un répertoire parent.

Pour modifier le fichier .htaccess :

1. Créez un fichier texte à l'aide d'un éditeur de texte comme Notepad++ ou le Bloc-Notes.
2. Ajoutez dedans les instructions de votre choix.
3. Sauvegardez le fichier en l'intitulant ".htaccess" sans extension. Si vous n'arrivez pas à le nommer correctement en local, enregistrez-le sous le nom "htaccess.txt".
4. Mettez en ligne le fichier à l'emplacement souhaité sur votre serveur, à l'aide d'un client FTP comme Filezilla.
5. Si votre fichier s'appelle htaccess.txt, renommez-le afin qu'il s'intitule ".htaccess".
6. Enfin, testez les règles ajoutées pour vérifier qu'il n'y a pas d'erreur serveur sur le site et qu'elles fonctionnent comme prévu.

Si vous modifiez un .htaccess existant, pensez à faire une sauvegarde de l'original avant tout changement. Ainsi, en cas d'erreur, il sera très rapide de remettre en place une version fonctionnelle du fichier afin de retrouver l'accès à votre site.

Que contient le fichier .htaccess de WordPress par défaut ?

Si votre site est sous WordPress et que vous voulez restaurer un fichier .htaccess par défaut, voici ce que contient le .htaccess de WordPress avant toute personnalisation :

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Les lignes commençant par des dièses sont des commentaires, vous pouvez aussi utiliser le dièse si vous avez besoin d'annoter votre fichier pour vous souvenir à quoi correspondent les différentes directives que vous y ajoutez.

Existe-t-il un équivalent du fichier .htaccess sur Nginx ?

Nginx ne fonctionne pas de la même manière qu'un serveur Apache, et ne permet pas d'appliquer certains réglages à la volée sur un site précis via un fichier précis. En revanche, on peut tout à fait donner des instructions de configuration dans le fichier de configuration nginx.conf pour un site donné et obtenir in fine les mêmes fonctionnalités qu'avec un htaccess : configurer des redirections, des règles de sécurité, protéger certains contenus par un mot de passe, etc.

Si vous passez de Apache à Nginx, il existe des outils en ligne pour "convertir un htaccess" en directives pour Nginx, comme Winginx. Bien entendu, mieux vaut approfondir vos connaissances avant d'utiliser "à l'aveuglette" ce type d'outil.

Des serveurs

Problèmes fréquents liés au .htaccess

L'erreur la plus courante est probablement l'erreur de syntaxe dans la rédaction d'une instruction. Vous allez alors rencontrer une erreur 500 (erreur interne du serveur). Il suffit d'effacer les personnalisations que vous venez d'effectuer afin de récupérer l'accès à votre site.

Autre situation fréquente : un conflit entre plusieurs règles à l'intérieur du fichier. Le serveur Apache va en effet lire le .htaccess de bas en haut, comme vous liriez la page d'un livre. Il interprète donc les règles qu'il croise au fur et à mesure... et parfois, deux instructions peuvent se révéler contradictoires.

Si vous suspectez ce type de problème, vous pouvez essayer de "remonter" l'instruction litigieuse plus haut dans le fichier, pour voir si cette modification de l'ordre de lecture résout le problème.

Vous pouvez également rencontrer un conflit entre plusieurs fichiers .htaccess : par exemple, si vous avez placé un premier fichier dans un sous-répertoire, avec certaines instructions... et un autre fichier dans un répertoire parent, avec d'autres instructions. Dans ce cas, retirez temporairement l'un des deux fichiers et regardez si cela résout le conflit. Si c'est le cas, il faudra ensuite isoler les directives qui se contredisent.

Autre situation : Apache n'arrive pas à lire votre fichier. Souvent, c'est lié à l'oubli du point devant le nom du fichier, en particulier si vous l'avez téléchargé en local pour le modifier avec un logiciel type Notepad++ ou Bloc-Notes. En sauvegardant, le fichier s'enregistre sous le nom "htaccess.txt", vous le mettez en ligne ainsi... et forcément, Apache ne parvient pas à le lire. Pensez à retirer l'extension s'il y en a une (ce doit être "htaccess" et non "htaccess.quelquechose") et à ajouter le point au début du nom.

D'autres erreurs peuvent découler des directives incluses dans le fichier : par exemple, des redirections mal configurées qui provoquent une boucle (la page A redirige vers B qui redirige vers A), le site renvoyant alors une erreur "Too many redirects".

Ou encore des références à un module Apache qui n'est pas activé sur votre serveur. Pour cette raison, il est toujours utile de mettre une condition à vos directives, par exemple

<IfModule mod_expires.c>{Instructions}</IfModule>

. Ainsi, si le module cité n'est pas disponible, l'instruction ne sera pas interprétée et il n'y aura pas d'erreur.

J'espère que ce guide d'initiation à .htaccess vous donnera quelques bases pour comprendre comment personnaliser le fichier à l'aide des éléments de code que vous trouverez facilement sur le web.


Poster un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *



Si vous aimez les articles du site, n'hésitez pas à faire vos achats sur Amazon.fr via ce lien ; il me permettra de toucher une commission grâce au programme Partenaires Amazon EU.