Redirection

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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