htaccess

Le .htaccess est un fichier texte de configuration. Il permet à Apache de gérer les changements de configuration de base par répertoire.

WordPress utilise ce fichier pour définir la façon dont Apache utilise les fichiers à partir de son répertoire racine et de ses sous-répertoires. Plus particulièrement, WP modifie ce fichier pour pouvoir gérer les permaliens optimisés.

Cette page peut être utilisée pour restaurer un fichier .htaccess corrompu (par exemple, une extension qui ne fonctionne pas correctement).

WordPress de base

Voici un exemple de fichier .htaccess pour une installation WordPress de base.

  • Les lignes précédées d’un signe dièse (#) sont des lignes de commentaire.
  • Chaque ligne de commentaire doit être précédée d’un signe dièse.
# 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

Haut ↑

Multisite

Les fichiers .htaccess des installations multisite sont particuliers, en voici quelques exemples.

Haut ↑

Versions WordPress 3.5 et supérieures

Si vous avez activé le multisite sur WordPress 3.5 ou version ultérieure, utilisez l’un des exemples suivants.

Exemple sur une installation en sous dossier

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

# ajouter un slash après /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Exemple sur une installation en sous domaine

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

# ajouter un slash après /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

Haut ↑

Versions WordPress 3.4 et antérieures

Si vous avez initialement installé WordPress avec la version 3.4 ou une version antérieure et activé le multisite, vous devez utiliser l’un des exemples suivants.

En sous-dossier

Versions WordPress de 3.0 à 3.4.2

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# fichiers téléversés
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# ajouter un slash après /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress

Exemple en sous-domaine

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# fichiers téléversés
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
# END WordPress

Haut ↑

Exemples généralistes

Haut ↑

Options

Toutes les options précédées d’un + sont ajoutées aux options existantes, et toutes les options précédées d’un sont supprimées des options existantes.

Toutes les combinaisons des valeurs pour la directive Options sont possibles :

None

Toutes les options sont désactivées.

All

Toutes les options sauf MultiViews. C’est le réglage par défaut.

ExecCGI

L’exécution de scripts CGI à l’aide de mod_cgi est autorisée.

FollowSymLinks

Le serveur suivra les liens symboliques dans ce répertoire.

Includes

Les inclusions côté serveur fournies par mod_include sont autorisées.

IncludesNOEXEC

Les inclusions côté serveur sont autorisées, mais les commandes #exec cmd et #exec cgi sont désactivées.

Indexes

L’URL affiche une liste des fichiers et dossiers du répertoire s’il n’existe aucun fichier spécifiquement désigné dans DirectoryIndex, tel que index.html, dans le répertoire demandé. Voir Indexes, DirectoryIndex.

MultiViews

Le contenu négocié MultiViews est autorisé en utilisant mod_negotiation.
En savoir plus : mod_negotiation, MultiViews.

SymLinksIfOwnerMatch

Ne suivra uniquement que les liens symboliques où la cible appartient au même identifiant d’utilisateur que le lien.
En savoir plus : SymLinksIfOwnerMatch

Cela désactivera toutes les options, puis n’activera que FollowSymLinks, ce qui est nécessaire pour mod_rewrite.

Options None
Options FollowSymLinks

Haut ↑

DirectoryIndex

DirectoryIndex définit le fichier qu’Apache renverra si le répertoire est appelé.

Plusieurs URLs peuvent être données, auquel cas le serveur renverra la première qu’il trouve.

DirectoryIndex index.php index.html /index.php

Haut ↑

DefaultLanguage

Le réglage défini par DefaultLanguage entraînera que tous les fichiers qui n’ont pas encore de balise de langue spécifique associée utiliseront celle définie par défaut. Dans l’exemple ci-dessous, ce sera la langue anglaise.

DefaultLanguage en

Haut ↑

Default Charset

Définissez le codage de caractères par défaut envoyé dans l’en-tête HTTP.
Voir : Réglages des informations de jeu de caractères dans .htaccess (en anglais).

AddDefaultCharset UTF-8

Définir un jeu de caractères pour des fichiers spécifiques
En savoir plus : AddType

AddType 'text/html; charset=UTF-8' .html

Défini pour des fichiers spécifiques
En savoir plus : AddDefaultCharset et AddCharset

AddCharset UTF-8 .html

Haut ↑

ServerSignature

La directive ServerSignature permet la configuration d’une ligne de pied de page sous les documents générés par le serveur. Il est possible d’ajouter une ligne contenant la version du serveur et le nom d’hébergement virtuel aux pages générées par le serveur (documents d’erreur internes, listes de répertoires FTP, sortie mod_status et mod_info, etc., mais pas les documents générés par CGI ou les documents d’erreur personnalisés).

On

Ajoute une ligne avec le numéro de version du serveur et le nom du serveur de l’hébergement virtuel.

Off

Supprime la ligne de pied de page

Email

Crée une référence « mailto: » au ServerAdmin du document référencé

SetEnv SERVER_ADMIN admin@site.com
ServerSignature Email

Haut ↑

Forcer le téléchargement des fichiers

Ce qui suit fera que toutes les demandes de fichiers se terminant par les extensions spécifiées ne seront pas affichées dans le navigateur mais forcera l’affichage d’une boîte de dialogue Enregistrer sous afin que l’internaute puisse les télécharger.

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

Haut ↑

Compression HTTP

La directive AddOutputFilter permet d’associer l’extension de nom de fichier définie par l’argument extension aux filtres qui traiteront les réponses en provenance du serveur avant de les envoyer au client. Ces filtres s’ajoutent à tout filtre défini par d’autres directives comme SetOutputFilter et AddOutputFilterByType. Cette association est fusionnée avec toute autre association en vigueur, et l’emporte sur toute association préexistante pour la même extension.
En savoir plus : documentation Apache version 2.4

Voir aussi : https://developers.google.com/speed/docs/insights/EnableCompression (en anglais).

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Forcer la compression pour certains fichiers
En savoir plus : SetOutputFilter

SetOutputFilter DEFLATE

Haut ↑

Envoyer des en-têtes HTTP personnalisées

La directive Header vous permet d’envoyer des en-têtes HTTP pour chaque requête ou uniquement pour des fichiers spécifiques. Vous pouvez afficher les en-têtes HTTP d’un site en utilisant Firebug, Chrome Dev Tools, Wireshark ou un outil en ligne.

Header set X-Pingback "http://www.askapache.com/xmlrpc.php"
Header set Content-Language "en-US"

Haut ↑

Annuler les en-têtes HTTP

Cela supprimera les en-têtes HTTP (Header), l’utilisation de la directive always essaiera de les supprimer efficacement.

Header unset Pragma
Header always unset WP-Super-Cache
Header always unset X-Pingback

Haut ↑

Connexion protégée par mot de passe

Ceci est très utile pour protéger le fichier wp-login.php. Vous pouvez utiliser ce générateur de fichier .htpasswd en ligne.

Authentification de base

AuthType Basic
AuthName "Password Protected"
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Satisfy All

Authentification à base de condensé
En savoir plus : AuthType Digest

AuthType Digest
AuthName "Password Protected"
AuthDigestDomain /wp-login.php https://www.askapache.com/wp-login.php
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Satisfy All

Haut ↑

Restreindre l’accès à une adresse IP spécifique

C’est un moyen de n’autoriser l’accès qu’à certaines adresses IP.

ErrorDocument 401 default
ErrorDocument 403 default

Order deny,allow
Deny from all
Allow from 198.101.159.98 localhost

Haut ↑

Protéger les fichiers sensibles

Cela empêche tout accès web à vos fichiers wp-config, error_logs, php.ini, et htaccess/htpasswds.

Order deny,allow
Deny from all

Haut ↑

SSL obligatoire

Cela forcera SSL et nécessitera le nom d’hébergement exact ou bien il redirigera vers la version SSL. Utile dans un fichier /wp-admin/.htaccess.

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.wordpress.com"
ErrorDocument 403 https://www.wordpress.com

Haut ↑

Ressources externes

Haut ↑

Voir aussi

Traduit par Patrice Pichon
Relu par Marie Comet & Jenny Dupuy
D’après la page EN du 09 décembre 2020
Dernière mise à jour le 04 mai 2021

Contribuer à la documentation en français de WordPress

Journal des modifications

04 mai 2021 Jenny Dupuy – Suppression de l’encodage des caractères accentués ou spéciaux dans les liens concernés