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
Multisite
Les fichiers .htaccess
des installations multisite sont particuliers, en voici quelques exemples.
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]
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
Exemples généralistes
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
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
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
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
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
Crée une référence « mailto:
» au ServerAdmin du document référencé
SetEnv SERVER_ADMIN admin@site.com ServerSignature Email
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
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
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"
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
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
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
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
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
Ressources externes
- Tutoriel du serveur HTTP Apache : fichiers .htaccess
- Document de référence rapide des directives
- Tutoriel .htaccess (en anglais)
- Guide rapide pour développeurs (en anglais)
- Trucs et asuces de .htaccess (en anglais)
- Mod_rewrite avancé (en anglais)
Voir aussi
- htaccess pour les sous-répertoires (en anglais)
- Utilisation des permaliens
- Modifier les permissions des fichiers
- Compétences UNIX Shell (en anglais)
- Rewrite API (en anglais)
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