Le fichier .htaccess est un petit fichier texte que le serveur lit avant d’afficher tes pages. Il permet de lui donner des consignes simples sans toucher au code du site ni à la configuration du serveur : « redirige telle URL », « force le HTTPS », « bloque l’accès à ce dossier », « affiche telle page 404 », etc.
On peut le voir comme un panneau de signalisation à l’entrée du site : tu poses quelques règles et le serveur les applique pour tout ce qui se trouve dans le dossier où est placé le fichier (et dans ses sous-dossiers).
Il fonctionne uniquement sur Apache / LiteSpeed. Si ton site tourne sur Nginx, il ne sert à rien. Et si ton hébergeur a désactivé le .htaccess, tes règles ne seront pas prises en compte.
Où se trouve le fichier .htaccess ?
Le fichier .htaccess est toujours placé à la racine de ton domaine.
Exemple :
/monsite/.htaccess
Tu peux aussi en avoir plusieurs : un à la racine et d’autres dans des sous-dossiers. Lorsque plusieurs .htaccess sont présents, c’est toujours celui le plus proche du fichier demandé qui est appliqué en priorité.
Comment créer un fichier .htaccess ?
- Crée un fichier texte nommé .htaccess
- Ajoute tes directives (exemples ci-dessous)
- Upload sur ton serveur via un FTP ou ton espace d’hébergement
- Place le fichier à la racine de ton site web
Quelques exemple des règles .htaccess les plus utilisés
1. Redirections d’URL (SEO-friendly)
Il existe plusieurs façons de faire une redirection 301 ou 302 : via un module, côté serveur, ou encore directement dans le fichier .htaccess.
RewriteEngine On
Redirect 301 /ancienne-page.html
https://www.monsite.com/nouvelle-page/
2. Forcer l’utilisation HTTPS
Cette règle force tout le trafic HTTP à passer en HTTPS.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://monsite.com%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
3. Choisir la version du domaine
Ça sert à retirer ou ajouter le www aux URL du site.
#Retirer le www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
#Ajouter le www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
4. Rediriger un ANCIEN domaine vers le NOUVEAU
Remplace ancien-domaine.fr par nouveau-domaine.fr
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?ancien-domaine\.fr$ [NC]
RewriteRule ^ https://nouveau-domaine.fr%{REQUEST_URI} [R=301,L]
5. Page 404 personnalisée
Définir une page introuvable personnalisée. Remplace page-not-found.html par le chemin de la page à afficher.
ErrorDocument 404 /page-not-found.html
Tu peux également remplacer 404 par 403 ou d’autres codes erreurs.
6. Empêcher la liste des fichiers d’un dossier
Coupe l’affichage automatique du contenu d’un dossier sans page d’accueil (photos, backups…) afin d’éviter d’exposer des fichiers par mégarde.
Options -Indexes
Concrètement, si quelqu’un ouvre l’URL d’un dossier sans fichier d’index (index.php, index.html…), Apache n’affichera pas la liste des fichiers. À la place, il renverra un 403 Forbidden (ou ta page d’erreur 403 personnalisée si tu en as une).
7. Bloquer l’accès à certains fichiers et formats
Protège les fichiers cachés (.env, .git…), de configuration et d’archives (.sql, .zip…), pour empêcher toute fuite d’informations techniques ou de sauvegardes.
# Bloque tous les fichiers cachés (.env, .htaccess, .gitignore, etc.)
<FilesMatch "^\.">
Require all denied
</FilesMatch>
# Bloque quelques fichiers de config courants
<FilesMatch "^(composer\.(json|lock)|package(-lock)?\.json|config\.php)$">
Require all denied
</FilesMatch>
# Bloque l’accès aux extensions d’archives / backups / dumps
<FilesMatch "\.(sql|bak|old|backup|ini|log|conf|env|yml|yaml|lock|zip|tar|gz|7z)$">
Require all denied
</FilesMatch>
8. Protéger un dossier par mot de passe
Limiter l’accès à un dossier avec un fichier .htpasswd.
AuthType Basic
AuthName "Accès restreint"
AuthUserFile /chemin/absolu/vers/.htpasswd
Require valid-user
Génère le fichier .htpasswd depuis l’outil de ton hébergeur ou avec la commande htpasswd. Tu peux aussi utiliser des générateurs en ligne. Ensuite, remplace /chemin/absolu/vers/.htpasswd par le chemin exact vers le fichier que tu as créé.
9. Restreindre l’accès par adresse IP
Limite l’accès d’un répertoire à quelques adresses IP (bureau, prestataire) pour un contrôle simple, sans créer de comptes utilisateurs.
Remplace ces IPs par les tiennes :
# Autoriser SEULEMENT ces IPs
Require ip 198.51.100.10 203.0.113.5
10. Bloquer certaines IP
Bloque l’accès pour certaines IP et laisse passer le reste.
<RequireAll>
Require all granted
Require not ip 1.2.3.4
Require not ip 5.6.7.0/24
</RequireAll>
11. Anti‑hotlinking d’images
Empêche d’autres sites d’intégrer directement tes images pour économiser ta bande passante et garder le contrôle de tes médias.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.(jpe?g|png|gif|webp|avif)$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?monsite\.com/ [NC]
RewriteRule . - [F,L]
12. Cache navigateur (images, CSS, JS)
Fixe des durées de cache pour les images, CSS et JS : le navigateur garde les fichiers en mémoire et ton site s’affiche plus vite.
# Active des durées de cache
ExpiresActive On
# Images : 1 an
ExpiresByType image/avif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
# CSS/JS : 1 mois
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
# Nettoie les ETag pour éviter les revalidations inutiles
FileETag None
Header unset ETag
13. Compression (Brotli/Gzip)
Active la compression côté serveur (Brotli ou Gzip) pour réduire le poids des pages et accélérer le chargement, surtout sur les connexions lentes.
# Brotli si disponible
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS \
text/html text/plain text/css application/javascript application/json image/svg+xml
</IfModule>
# Gzip (fallback)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE \
text/html text/plain text/css application/javascript application/json image/svg+xml
</IfModule>
14. CORS pour les polices (typos)
Autorise le chargement des polices depuis un autre domaine ou sous‑domaine (CDN, sous‑domaine static) afin d’éviter que le navigateur bloque certaines typos.
<FilesMatch "\.(woff2?|eot|ttf|otf)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
15. Réécriture d’URL (URLs propres)
Retire l’extension .php des URLs pour un rendu plus lisible ; à tester soigneusement car cela peut impacter des liens internes ou des règles existantes.
RewriteEngine On
# Laisse passer les vrais fichiers/dossiers
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Sinon, essaie la version .php
RewriteRule ^(.+?)/?$ $1.php [L]
Bonnes pratiques pour utiliser .htaccess
- Toujours tester les modifications sur un site de pré-production
- Une chose à la fois : ajoute une règle, teste, puis passe à la suivante.
- Si tu vois une erreur 500, c’est souvent une faute de frappe : retire la dernière règle et réessaie.
- Faire une sauvegarde avant chaque modification, et reviens en arrière si erreur.
- Garder un fichier propre et bien commenté
- Limiter les directives inutiles pour ne pas ralentir ton site
- Vérifier la version de ton serveur Apache
Les erreurs fréquentes à éviter
- Mauvaise syntaxe (une erreur = site inaccessible/erreur 500)
- Redirections en boucle infinie
- Ne pas respecter la casse (majuscule/minuscule)
- Mettre trop de règles sans les grouper par logique
Gérer .htaccess sur un site WordPress
Si tu es sur un site WordPress, le CMS génère automatiquement un bloc .htaccess pour gérer les permaliens. Tu peux ajouter tes règles, mais ne modifie pas et n’écrase pas les règles de base. WordPress les réécrit dès que tu changes les permaliens.
Voici le bloc que WordPress ajoute au fichier .htaccess :
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Pour ajouter des règles, place-les au-dessus du bloc WordPress. Ne mets rien à l’intérieur : WordPress pourrait l’écraser à tout moment.
Certains plugins ajoutent leurs propres sections :
# BEGIN NomDuPlugin
...
# END NomDuPlugin
Ne modifie pas et n’écrase pas le bloc du module. Si tu veux changer son comportement, passe par les réglages du plugin plutôt que d’éditer son bloc.
Après un changement de structure ou si certaines URL renvoient une erreur 404 :
- Va dans Réglages → Permaliens, puis clique sur Enregistrer (même sans modifier d’option). Cela régénère le bloc .htaccess de WordPress.
- En cas de gros problème : sauvegarde ton fichier .htaccess, puis ré-enregistre les permaliens pour en recréer un propre.
Ne sous-estime pas .htaccess !
Le fichier .htaccess est petit, mais c’est un vrai levier : en quelques lignes, tu peux sécuriser (accès, fichiers sensibles), optimiser tes URL (redirections, HTTPS, www/non-www) et accélérer le chargement (cache, compression). Le tout, sans toucher au code ni au back-office.
Avance une règle à la fois pour éviter les boucles et les erreurs 500. Et garde en tête que .htaccess agit au niveau du serveur. Que ton site tourne sous WordPress, PrestaShop, Drupal ou soit un simple site vitrine, le principe reste le même.