Cadenas rose on PxHere Cadenas rose on PxHere

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 :