Les Allergies
Alimentaires

PHP - Rediriger sur une autre page (redirection)

N'importe quel webmaster réalise un jour qu'un de ses fichiers possède un nom qui ne convient pas ou que l'arborescence des fichiers doit être modifiée. Cependant, s'il est relativement facile de changer les liens sur son site, il est beaucoup plus difficile de faire changer les liens externes sur les autres sites. Par ailleurs, lorsque l'on change les pages de place, les moteurs de recherche risquent d'envoyer les utilisateurs dans le vide ou, pire, réinitialiser tout le référencement de la page.

Heureusement, il existe une solution simple : les redirections, permettant de maintenir la cohérence de la navigation (et du référencement) d'un site, même si l'ensemble des fichiers à changé de place.


IMPORTANT : Les en-têtes HTTP


Les redirections sont des en-têtes HTTP. Or, selon le protocole HTTP, les en-têtes HTTP doivent être envoyés avant tout autre type de contenu, ce qui signifie qu'aucun caractère ne doit être envoyé avant l'appel de la fonction header, pas même un espace !

En d'autre termes, la fonction header() doit impérativement être utilisée avant tout code HTML.

Pour plus d'informations, lire cet article : L'erreur "headers already sent by"

Redirection simple


Pour rediriger le visiteur vers une autre page (particulièrement utile dans une boucle conditionnelle), il suffit d'utiliser le code suivant :
<?php   
  header('Location: mapage.php');   
?>


mapage.php représente l'adresse de la page vers laquelle vous voulez rediriger. Cette adresse peut être absolue et peut également posséder des paramètres de la forme mapage.php?param1=val1¶m2=val2).

Chemin relatif / absolu


Dans l'idéal, préférez un chemin absolu à partir de la racine du serveur (DOCUMENT_ROOT), de la forme suivante :
<?php   
  header('Location: /repertoire/mapage.php');   
?>


Si jamais la page cible est sur un autre serveur, vous mentionner l'URL complète, de la forme suivante :
<?php   
  header('Location: http://www.commentcamarche.net/forum/');   
?>

Redirections temporaires/définitives


Par défaut, le type de redirection présenté ci-dessus est une redirection temporaire. Ce qui signifie notamment que les moteurs de recherche tels que Google ne la prennent pas en compte pour le référencement.

Ainsi, si vous souhaitez signifier aux moteurs de recherche que la page A est maintenant à l'emplacement B, il faut utiliser le code suivant en tout début du fichier PHP correspondant à la page A :

<?php 
  header('Status: 301 Moved Permanently', false, 301);   
  header('Location: adresse_de_la_page_B');   
?>

Exemple


La page possède le code suivant :

<?     
  header('Status: 301 Moved Permanently', false, 301);   
  header('Location: /pc/imprimante.php3');   
  exit();     
?>


Ainsi, lorsque vous cliquez sur le lien ci-dessus, vous êtes automatiquement transféré sur la page

De plus, il s'agit d'une redirection permanente (Status: 301 Moved Permanently). Ainsi, si vous tapez la première URL dans Google, celui-ci vous donnera comme résultat l'adresse de la seconde, preuve qu'il a pris en compte la redirection

Interprétation du code PHP


Le code PHP situé après l'appel de la fonction header() sera interprété par le serveur, même si le visiteur est déjà parti à l'adresse spécifiée dans la redirection, ce qui signifie que dans la plupart des cas vous avez intérêt à faire suivre la fonction header() de la fonction exit() afin de ne pas faire travailler le serveur pour rien :

<?php 
  header('Status: 301 Moved Permanently', false, 301);   
  header('Location: adresse');   
  exit();   
?>

Voir également

Publié par Thom@s - Dernière mise à jour le 25 août 2010 à 16:11 par vlmath
Ce document intitulé « PHP - Rediriger sur une autre page (redirection) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  PHP - Rediriger sur une autre page (redirection)
  •  URL de départ suite à une redirection » Bonjour, Bonjour, Je travaille actuellement sur un petit projet de PHP dans le cadre de mon DUT Informatique et j'ai un petit problème. Je travaille sur Wamp et le localhost pour le moment. Je souhaite récupérer l'URL de départ après une redirection...
  •  [HTML/PHP] Rediriger une page dans une frame » Bien le bonjour, J'ai installé un script php d'inscription à une newletter sur mon site (qui a des frames), et lors d'une inscription/désinscription l'utilisateur doit comme souvent confirmer en cliquant sur un lien qu'il reçoit par mail. Ca marche...
  •  Envoyer une variable vers une page en PHP (Résolu) » Meilleure réponse: Bonjour, pour transmettre des variables et de maniere cachée, utilisez les boutons cachés : <html> <head> </head> <body> <form method="post" action="page_vers_laquelle_transferer_la_variable.php" <input type="hidden" name="nom"...
  •  Redirection de page html vers d'autre (Résolu) » Meilleure réponse: <meta http-equiv="Refresh" content="0;url=http://www.alidhan.net"> c'est ce code qui est bon !!
  •  Suprimer définitivement LOST page de demarage » Meilleure réponse: Salut vas dans outils et options internet tu as écrit page d'acueil avec la fameuse adresse lost. efface l'adresse et met celle de ton choix PS: je te conseil de mettre http://www.google.fr/ il est plus rapide a trouver qu'une autre pag
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
PHP - Rediriger en fonction de la langue du visiteur
PHP - Upload de fichiers