Bases & drapeaux

  • RewriteEngine On

    Active le moteur de réécriture mod_rewrite. Obligatoire en tête de fichier avant toute directive RewriteCond ou RewriteRule.

  • <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
    </IfModule>

    La protection <IfModule> évite une erreur 500 si le module n'est pas chargé. RewriteBase fixe le chemin de référence des règles relatives.

  • Drapeaux (flags) courants

    [L] dernière règle appliquée · [R=301] redirection permanente · [NC] insensible à la casse · [QSA] conserve la chaîne de requête · [NE] n'encode pas les caractères spéciaux · [OR] condition alternative.

  • Options -Indexes

    Désactive le listage automatique du contenu d'un dossier dépourvu de page d'accueil. À poser par réflexe sur tout site en production.

  • Ordre de lecture : Les règles sont évaluées de haut en bas et le fichier est relu à chaque requête : aucun redémarrage d'Apache n'est nécessaire, mais un fichier .htaccess trop long pénalise les performances.

Redirections

  • Redirect / RedirectPermanent

    Redirect (ou RedirectTemp) produit une redirection temporaire (code 302), RedirectPermanent une redirection définitive (code 301), celle qui transmet le référencement.

  • RedirectPermanent /home /?lang=en

    Redirige une adresse vers une autre sur le même site. Ces directives n'acceptent pas d'expression régulière : pour cela, utiliser RedirectMatch ou RewriteRule avec [R=301].

  • RedirectPermanent /formations https://formations.example.org/

    Redirige un chemin local vers un site externe.

  • RedirectMatch "^/ecrire$" /ecrire/

    Ajoute une barre oblique finale. L'expression régulière est indispensable ici : un simple /ecrire provoquerait une boucle de redirection infinie.

  • RedirectMatch "^\/notre-societe\/$" "/notre-societe"

    Supprime à l'inverse une barre oblique finale.

  • RedirectMatch "^\/spip\/(.*)" "/autre/chemin/$1"

    Redirige toute une arborescence en conservant la fin de l'adresse, capturée par (.*) et restituée par $1.

HTTPS & domaine canonique

  • RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

    Redirige tout le trafic HTTP vers HTTPS en préservant l'hôte et le chemin demandés.

  • RewriteEngine On
    RewriteCond %{HTTP_HOST} ^alsacreations.fr [OR]
    RewriteCond %{HTTP_HOST} ^www.alsacreations.fr
    RewriteRule ^(.*)$ https://www.alsacreations.com/$1 [R=301,NC,L]

    Redirige un domaine, ou tout un ensemble de domaines grâce au drapeau [OR], vers un domaine unique.

  • RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

    Supprime le préfixe www. pour imposer une adresse canonique unique. %1 reprend la capture de la RewriteCond, $1 celle de la RewriteRule.

  • Header always set Strict-Transport-Security "max-age=31536000"

    Indique aux navigateurs de ne plus jamais tenter d'accéder au site en clair. À n'activer qu'une fois le HTTPS pleinement opérationnel.

Réécriture

  • RewriteRule "^spip.php$" /home/www/spip/spip.php [L]

    Réécrit une adresse vers un chemin réel, sans changer l'adresse affichée. La chaîne de requête qui suit ? est ignorée par la règle : spip.php?page=truc correspond aussi.

  • RewriteRule ^img/(.*)$ /home/www/autre/chemin/img/$1 [L]

    Réécrit tout un dossier, ou tout ce qui commence par un motif donné, en conservant la suite du chemin.

  • RewriteRule ^notre-societe$ /autre/spip/notre-societe [L]
    RewriteRule ^notre-societe$ /autre/spip/notre-societe [L,R=301]

    Une adresse précise : réécriture interne silencieuse sur la première ligne, redirection permanente visible par le navigateur sur la seconde.

  • RewriteCond %{REQUEST_URI} !^/spip\.php.*
    RewriteRule ^(.*)$ /home/www/wordpress/public/$1 [L]

    Tout réécrire sauf une exception : le point d'exclamation inverse la condition.

Blocage & accès

  • RedirectMatch 404 .git
    RedirectMatch 404 /spip/

    Rend une ressource inaccessible en répondant « non trouvé ». Préférable à un 403, qui confirmerait l'existence de la ressource.

  • <FilesMatch "\.(env|ini|log|sql|bak)$">
      Require all denied
    </FilesMatch>

    Interdit l'accès direct aux fichiers sensibles par leur extension : configuration, journaux, sauvegardes de base de données.

  • Require all denied
    Require ip 192.0.2.14

    Réserve l'accès à une ou plusieurs adresses IP. Syntaxe Apache 2.4, qui remplace les anciens Order / Allow / Deny.

  • AuthType Basic
    AuthName "Accès restreint"
    AuthUserFile /chemin/absolu/.htpasswd
    Require valid-user

    Protège un dossier par identifiant et mot de passe. Le fichier .htpasswd se génère avec la commande htpasswd -c .htpasswd utilisateur.

  • Header set X-Robots-Tag "noindex, noarchive"

    Empêche l'indexation par les moteurs de recherche au niveau de l'en-tête HTTP, y compris pour des fichiers non HTML.

Erreurs & performances

  • ErrorDocument 404 /404.html
    ErrorDocument 403 /403.html

    Associe une page personnalisée à un code d'erreur. Le chemin part de la racine du site, pas du système de fichiers.

  • <IfModule mod_deflate.c>
      AddOutputFilterByType DEFLATE text/html text/css
      AddOutputFilterByType DEFLATE application/javascript image/svg+xml
    </IfModule>

    Active la compression à la volée des ressources textuelles. Inutile sur les images matricielles ou les archives, déjà compressées.

  • <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresByType image/webp "access plus 1 year"
      ExpiresByType text/css "access plus 1 year"
    </IfModule>

    Fixe la durée de mise en cache par les navigateurs. Une année ne se justifie que pour des fichiers dont le nom change à chaque version.

  • AddDefaultCharset UTF-8

    Impose l'encodage UTF-8 par défaut, ce qui évite les caractères accentués mal restitués.

  • Vérifier avant de mettre en ligne : Une redirection se teste avec curl -I https://example.org/chemin. Attention aux redirections 301 mises en cache par le navigateur : utiliser une fenêtre privée pendant les tests.

Retourner en haut de page