Redirection
| Fiche express | |
|---|---|
| Domaine | Redirections HTTP avec Apache |
| Redirection simple | Redirect / RedirectPermanent (mod_alias)
|
| Redirection conditionnelle | RewriteCond / RewriteRule (mod_rewrite)
|
| Voir aussi | Modules apache · Vhosts |
Apache propose deux familles d'outils pour rediriger des requêtes : les directives simples de
mod_alias (Redirect, RedirectPermanent...), pour un
mappage direct sans logique conditionnelle, et le moteur de réécriture mod_rewrite
(RewriteCond / RewriteRule), pour des règles conditionnelles
(motif d'URL, adresse IP, en-têtes...).
Page de maintenance
RewriteEngine On
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteRule ^ /maintenance.html [R=302,L]
Variante avec exception pour une liste d'IP (typiquement l'équipe technique qui doit pouvoir continuer à accéder au site pendant la maintenance) :
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.10$
RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.11$
RewriteCond %{REQUEST_URI} !^/attente/
RewriteRule ^/(.*)$ /attente/index.html [R=302,L]
Redirection selon l'adresse du serveur
Utile en répartition de charge manuelle ou en bascule entre deux nœuds :
RewriteCond %{SERVER_ADDR} 192\.168\.0\.23
RewriteRule ^/images/visu.action$ https://www.example.local/images/visu.action [R,L]
RewriteCond %{SERVER_ADDR} 192\.168\.0\.37
RewriteRule ^/images/visu.action$ https://192.168.0.37/images/visu.action [R,L]
Redirection permanente (301)
Indique aux moteurs de recherche et aux navigateurs que la ressource a définitivement changé d'adresse — le référencement et le cache navigateur sont mis à jour vers la nouvelle URL.
# Une page précise
Redirect permanent /toto/client.php http://www.nouveaudomaine.fr/client
# Tout le site
RedirectPermanent / http://www.nouveaudomaine.fr/
# Un dossier entier
RedirectPermanent /ancien-dossier http://www.nouveaudomaine.fr/nouveau-dossier
Avec condition sur le nom de domaine (utile pour rediriger plusieurs alias vers un domaine canonique) :
RewriteCond %{HTTP_HOST} ^www\.mondomaine\.fr$ [OR]
RewriteCond %{HTTP_HOST} ^mondomaine\.fr$
RewriteRule ^/fichier\.php$ http://www.mondomaine.fr/fichier.php [R=301,L]
Redirection temporaire (302)
Signale un déplacement provisoire — le référencement et le cache ne doivent pas être mis à jour, la ressource doit revenir à son adresse d'origine ultérieurement.
# Une page précise
Redirect /ancien-dossier/ancienne-adresse.html http://www.domaine-temporaire.fr/dossier-provisoire/fichier-provisoire.html
# Tout le site
Redirect / http://www.domaine-temporaire.fr/
# Un dossier entier
Redirect /ancien-dossier http://www.domaine-temporaire.fr/dossier-provisoire
Redirection depuis une page PHP
<?php
header("Location: http://www.domaine-temporaire.fr/dossier-provisoire/fichier-provisoire.html");
exit();
(bug corrigé : le code source utilisait des guillemets typographiques ” autour de
la chaîne Location: — invalides en PHP, qui exige des guillemets droits
". Tel quel, l'appel provoquait une erreur de syntaxe et bloquait l'exécution du
script.)
Liste des drapeaux mod_rewrite
| Drapeau | Effet |
|---|---|
R |
Redirige (R=301 ou R=302 pour préciser le type)
|
F |
Force une réponse 403 Forbidden |
G |
Force une réponse 410 Gone (ressource définitivement supprimée) |
L |
Dernière règle (last) — arrête le traitement des règles suivantes |
N |
Relance l'évaluation des règles depuis le début (next round) |
C |
Chaîne la règle avec la suivante (chain) |
T |
Force le type MIME de la réponse (T=type/mime)
|
NS |
Ignore la règle pour les sous-requêtes internes |
NC |
Rend la règle insensible à la casse |
QSA |
Ajoute la chaîne de requête existante à celle de la destination |
NE |
N'échappe pas les caractères spéciaux dans le résultat |
PT |
Repasse le résultat par le gestionnaire d'URL standard (utile avec mod_alias) |
S |
Saute les N règles suivantes (S=3)
|
E |
Positionne une variable d'environnement (E=var:valeur), lisible par les règles suivantes
|
Voir aussi
- Modules apache — activation de mod_rewrite / mod_alias
- Vhosts — où placer ces règles dans la configuration