

Configuration du fichier htaccess avec WordPress
A travers la configuration du fichier htaccess, on cherche à obtenir plus de sécurité et plus de rapidité pour notre site WordPress.
Le fichier htaccess est automatiquement créé par WordPress à
la racine pour gérer les permaliens. Ce fichier de configuration du serveur Apache
permet de régler de multiples paramètres : sécurité, cache, redirections, etc … Le
comportement du serveur Apache sera directement impacté par les modifications que l'on
va lui apporter.
Les exemples de configuration du fichier htaccess sont adaptés à mon
site web. A vous de voir s'il vous conviennent car ils ne sont pas exhaustifs et ne
constituent pas un standard.
Le fichier htaccess WordPress
Quand on ouvre le fichier htaccess, on trouve la configuration ajoutée par WordPress pour gérer les permaliens. Il ne faut rien écrire entre les balises WordPress car cette configuration est susceptible de changer et donc d'effacer votre code. Tout ce que vous ajouterez doit être positionné après ce bloc.
# 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
Redirection HTTPS
Le protocole HTTPS est devenu inévitable pour des raisons de sécurité, pour améliorer
le référencement naturel et pour répondre aux exigences de Google, Apple et
WordPress.
Pour s'assurer que les visiteurs accèdent tous à la version HTTPS de votre site web,
on réécrit les URL avec le module mod_rewrite
. Ne pas oublier de
remplacer « votre-site.fr » par votre adresse.
# HTTPS REDIRECTION
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://votre-site.fr/$1 [R=301,L]
Paramètres de sécurité
Protection des fichiers sensibles
Interdit tout accès web aux fichiers wp-config.php
,
error_logs
, php.ini
et htaccess
/
htpasswds
.
# PROTECT SENSITIVE FILES
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)>
Order deny,allow
Deny from all
</FilesMatch>
Restreindre la visibilité des répertoires
Interdit l'accès aux répertoires.
# BAN VIEW DIRECTORY
Options All -Indexes
Protéger l'auteur
Masque l'identifiant d'un auteur.
# HIDE THE AUTHOR IDENTIFICATION
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
</IfModule>
Eviter les spams dans les commentaires
Limite le spam dans les commentaires. Ne pas oublier de remplacer « votre-site.fr » par votre adresse.
# AVOID SPAM COMMENT
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.votre-site.fr.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</IfModule>
Empêcher le hotlinking
Permet de bloquer le hotlinking des images. Ne pas oublier de remplacer « votre-site.fr » par votre adresse.
# DISABLE HOTLINKING
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?votre-site.fr [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://satyr.io/600x300/3?text=UNAUTHORIZED+HOTLINKING [NC,R,L]
Bloquer l'utilisation de certains scripts
Permet de désactiver l'accès à certains scripts.
# BLOCKING SCRIPTS
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]
Gestion du cache
Mise en cache navigateur
Permet d'indiquer quels types de fichiers peuvent rester dans le cache du navigateur et pendant quelle durée, sans que le navigateur n'ait besoin de vérifier la validité du cache. La conséquence est une diminution drastique du nombre de requêtes.
# EXPIRE HEADERS
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType image/svg xml "access plus 1 month"
ExpiresByType text/css "access 1 week"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 year"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-font-ttf "access plus 1 year"
ExpiresByType font/opentype "access plus 1 year"
ExpiresByType application/x-font-woff "access plus 1 year"
ExpiresByType application/x-font-woff2 "access plus 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
Expiration du cache navigateur
Vient en complément de l'expire headers
, en fonction de votre serveur ou
le navigateur utilisé par vos visiteurs.
# CACHE CONTROL
<IfModule mod_headers.c>
# One year for image files
<FilesMatch ".(jpg|jpeg|png|gif|ico)">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
# One week for css
<FilesMatch ".(css)">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# One month for js
<FilesMatch ".(js)">
Header set Cache-Control "max-age=2628000, public"
</FilesMatch>
</IfModule>
Encodage UTF-8 par défaut
Défini le codage par défaut des caractères envoyé dans l'en-tête HTTP.
# DEFAULT ENCODING UTF-8
AddDefaultCharset UTF-8
Activer la compression
La compression est un moyen simple et efficace d'économiser de la bande passante et d'accélérer la vitesse de chargement de votre site.
# ENABLE COMPRESSION
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/xhtml text/html text/plain text/xml text/javascript application/x-javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</IfModule>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE application/rss xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
Liens
Pour aller plus loin avec le fichier htaccess et WordPress :
- Le codex de WordPress détaille la configuration du fichier htaccess
- Définir un fichier .htaccess optimisé pour WordPress chez wpformation.com
- Le guide ultime du fichier .htaccess dans WordPress chez wpmarmite.com