Flux rss

[PHP] Rediriger sur une autre page (redirection)

Bookmark Ajouter aux favoris / Partager
Dernière mise à jour le 29 novembre 2008 à 14:29 par Nilou17
Publié par Thom@s
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.



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/');
?>

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"

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 :

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

Exemple


La page http://www.commentcamarche.net/pc/imprim.php3 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 http://www.commentcamarche.net/pc/imprimante.php3

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 : http://www.google.fr/search?hl=fr&q=http%3A%2F%2Fwww.commentcamarche.net%2Fpc%2Fimprim.php3&btnG=Recherche+Google&meta=

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 :

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

Voir également

Wordpress, redirection de page (Résolu) Bonjour tous le monde, J'ai créé mon blog perso sous Wordpress et j'ai un petit problème. Je n'arrive pas à rediriger directement ma page "photos" de mon blog vers ma page photos existante externe à wordpress. Merci pour votre coup de pouce...... www.commentcamarche.net/forum/affich-5479426-wordpress-redirection-de-page
Probleme Url rewriting + redirection 404... (Résolu) Salut a tous les Webeux, Je viens de terminer un site et je m'attaquais a la personnalisation des erreurs 404. Je suis heberge chez 1and1 et mon url rezriting fonctionne par contre, impossible de faire fonctionner la redirection personnalisee, la page... www.commentcamarche.net/forum/affich-10473276-probleme-url-rewriting-redirection-404
Redirection nom de domaine vers page perso Bonjour, Je viens d'acheter un nom de domaine à un hébergeur (LyonHebergement.com). D'un autre coté j'ai créé un site sur les pages perso de mon FAI (Neuf SFR) dont l'hôte est le suivant (ftpperso.sfr.fr). Ma question est comment faire pour que mon... www.commentcamarche.net/forum/affich-9597215-redirection-nom-de-domaine-vers-page-perso
[Webmaster] Faire une redirectionLes différentes solutions sont présentées de la meilleure (.htaccess) à la moins bonne (JavaScript). Un .htaccess Le .htaccess est à placer dans le répertoire qui doit être redirigé. On applique une redirection de cette façon : RedirectPermanent... www.commentcamarche.net/faq/sujet-4640-webmaster-faire-une-redirection
Redirection de page incorrecteSalut a tous, j'ai un petit souci avec free deja pour configurer le multiposte mais le bouquet c'est que je ne peut pas valider la CGV (Condition Générales de Vente) car quand je la fait je me retrouve avec cette page [ Redirection de page incorrecte... www.commentcamarche.net/forum/affich-2564878-redirection-de-page-incorrecte
Redirection DNS 1&1 vers serveur DNS maison (Résolu)Bonjour, J'ai acheté un nom de domaine chez 1&1 et j'aimerai le rediriger chez moi. J'ai mon serveur DNS (ns1) derrière un routeur et j'ai simplement redirigé le champ A de la config DNS (sur l'interface 1&1) vers l'ip de mon routeur (redirection du... www.commentcamarche.net/forum/affich-6493510-redirection-dns-1-1-vers-serveur-dns-maison
Redirection en PHPBonjour, Qqun peur me dire cmt faire pour redirectioner à une autre page. par example: après le traitement d'un script je trouve qu'il ya qq chose qui va pas , donc je vx diriger a une page erreur. Merci www.commentcamarche.net/forum/affich-1059102-redirection-en-php