Performance

.htaccess WordPress : optimisations performances et cache navigateur

Publié le 31 March 2026 — 5 min de lecture
En bref

Optimisez votre .htaccess WordPress : compression Gzip, cache navigateur, sécurité, redirections 301 et configuration spécifique OVH/o2switch.

Introduction : le rôle du .htaccess pour Apache et WordPress

Le fichier .htaccess est un fichier de configuration local pour le serveur web Apache. Il permet de définir des règles qui s’appliquent à un répertoire et tous ses sous-répertoires, sans toucher à la configuration principale d’Apache. Pour WordPress, ce fichier est crucial : il gère les permaliens, les redirections, la compression, le cache navigateur et la sécurité. En 2026, la majorité des hébergements mutualisés français (OVH, o2switch, Ionos) utilisent encore Apache, rendant la maîtrise du .htaccess indispensable.

Ce guide couvre les règles de base WordPress, la compression Gzip/Brotli, le cache navigateur, la sécurisation et les redirections 301.

Les règles de base WordPress pour les permaliens

À l’installation, WordPress crée automatiquement ce bloc dans le .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

Ce bloc dit à Apache : “Si le fichier ou dossier demandé n’existe pas physiquement, redirige vers index.php”. C’est ce qui permet à WordPress de gérer ses URLs propres (permaliens). Ne modifiez jamais ce bloc manuellement : WordPress le régénère via Réglages > Permaliens.

Activer la compression Gzip et Brotli

La compression réduit le poids des fichiers texte (HTML, CSS, JS) de 60 à 80 % avant envoi au navigateur.

# Compression Gzip
<IfModule mod_deflate.c>
  # Compresser les types MIME courants
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/json
  AddOutputFilterByType DEFLATE application/ld+json
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/woff
  AddOutputFilterByType DEFLATE font/woff2

  # Supprimer les bugs de compression pour certains navigateurs
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch MSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

# Compression Brotli (si le module est disponible)
<IfModule mod_brotli.c>
  AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml
  AddOutputFilterByType BROTLI_COMPRESS text/css application/javascript
  AddOutputFilterByType BROTLI_COMPRESS application/json image/svg+xml
</IfModule>

Cache navigateur avec les Expires headers

Le cache navigateur évite de re-télécharger les ressources statiques (images, CSS, JS) à chaque visite. C’est l’une des optimisations PageSpeed les plus impactantes.

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 month"

  # HTML : court (contenu dynamique)
  ExpiresByType text/html "access plus 0 seconds"

  # CSS et JavaScript : long
  ExpiresByType text/css "access plus 1 year"
  ExpiresByType application/javascript "access plus 1 year"
  ExpiresByType text/javascript "access plus 1 year"

  # Images : très long
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"
  ExpiresByType image/x-icon "access plus 1 year"

  # Polices
  ExpiresByType font/ttf "access plus 1 year"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
</IfModule>

# Cache-Control headers
<IfModule mod_headers.c>
  <FilesMatch ".(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff|woff2)$">
    Header set Cache-Control "max-age=31536000, public, immutable"
  </FilesMatch>
</IfModule>

Sécuriser WordPress avec le .htaccess

# Bloquer l'accès à xmlrpc.php (vecteur d'attaque fréquent)
<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

# Protéger wp-config.php
<Files wp-config.php>
  Order Deny,Allow
  Deny from all
</Files>

# Bloquer l'accès aux fichiers sensibles
<FilesMatch "^(wp-config.php|.htaccess|readme.html|license.txt|wp-config-sample.php)$">
  Order Allow,Deny
  Deny from all
</FilesMatch>

# Bloquer l'accès direct aux fichiers PHP dans wp-includes
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^wp-admin/includes/ - [F,L]
  RewriteRule !^wp-includes/ - [S=3]
  RewriteRule ^wp-includes/[^/]+.php$ - [F,L]
  RewriteRule ^wp-includes/js/tinymce/langs/.+.php - [F,L]
  RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

# Désactiver la navigation dans les répertoires
Options -Indexes

Redirections 301 propres avec le .htaccess

# Redirection simple (ancienne URL → nouvelle URL)
Redirect 301 /ancienne-page/ https://example.com/nouvelle-page/

# Redirection avec mod_rewrite (plus flexible)
<IfModule mod_rewrite.c>
  RewriteEngine On
  # HTTP vers HTTPS
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

  # www vers non-www
  RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
  RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

  # Redirection d'un ancien slug d'article
  RewriteRule ^ancien-article/?$ /nouveau-article/ [R=301,L]
</IfModule>

.htaccess sur hébergements français : OVH, o2switch, Ionos

Quelques spécificités selon l’hébergeur :

Hébergeur Spécificité Remarque
OVH Shared mod_deflate disponible, mod_brotli non Compression Gzip OK, Brotli non
o2switch LiteSpeed avec .htaccess Apache compatible Ajoutez aussi les règles LiteSpeed Cache
Ionos (1&1) Certaines directives bloquées Tester chaque règle individuellement
Infomaniak Apache + mod_deflate + mod_headers Toutes les règles fonctionnent

Sur o2switch (LiteSpeed), préférez utiliser le plugin LiteSpeed Cache plutôt que les règles .htaccess manuelles pour la compression et le cache : LiteSpeed a ses propres directives plus efficaces.

Pour une optimisation technique complète de votre site WordPress, notre agence SEO technique Paris réalise des audits approfondis et implémente les meilleures pratiques.

Questions fréquentes sur le .htaccess WordPress

Mon site affiche une erreur 500 après modification du .htaccess, que faire ?

Une erreur 500 après modification du .htaccess signifie généralement une syntaxe incorrecte ou une directive non supportée par votre serveur. Reconnectez-vous via FTP, téléchargez le .htaccess actuel, supprimez ou commentez la dernière modification ajoutée (avec #), puis re-uploadez. Pour déboguer, activez LogLevel debug dans Apache ou consultez les logs d’erreurs de votre hébergement (cPanel > Error Logs).

Dois-je modifier le .htaccess directement ou via un plugin ?

Pour les optimisations courantes, des plugins comme WP Rocket, W3 Total Cache ou LiteSpeed Cache modifient automatiquement le .htaccess et gèrent les incompatibilités hébergeur. La modification manuelle est recommandée pour les développeurs qui veulent un contrôle précis et éviter les conflits entre plugins. Dans tous les cas, sauvegardez toujours le .htaccess original avant modification.

Le .htaccess est-il compatible avec Nginx ou LiteSpeed ?

Nginx n’utilise pas de .htaccess : sa configuration est définie dans des fichiers de configuration serveur. Si votre hébergement Nginx propose une compatibilité .htaccess, elle est partielle et limitée. LiteSpeed supporte nativement la syntaxe .htaccess Apache, donc les règles fonctionnent généralement, mais LiteSpeed a ses propres directives (RewriteRule en mode LSAPI) plus performantes.

Comment vérifier si la compression Gzip fonctionne sur mon site ?

Utilisez l’outil GTmetrix (onglet Waterfall) ou PageSpeed Insights : si Gzip est actif, les fichiers texte affichent un poids réduit en transfert. Vous pouvez aussi tester via curl -I -H "Accept-Encoding: gzip" https://votresite.com/ et vérifier la présence de Content-Encoding: gzip dans les headers de réponse.

W
Rédigé par
WebEngine
Développeur web freelance à Paris spécialisé WordPress, WooCommerce et SEO technique depuis 2010. 13 avis vérifiés · Note 5/5. Chaque site livré atteint un score PageSpeed mobile supérieur à 90.

Un projet en tête ?

Devis gratuit sous 48h, sans engagement.

Demander un devis gratuit