Accueil > Développement > Programmation > Les redirections en PHP

Les redirections en PHP

Ou comment rediriger ses utilisateurs et Google en même temps.

lundi 22 mars 2010, par Prélude

Les redirections en PHP permettent de ne pas afficher n’importe quoi à l’utilisateur. Par exemple, lorsqu’il recherche une fiche d’un jeu sur un annuaire et que cette fiche n’existe pas / plus.

Il y a quelques règles à respecter pour ne pas tomber dans certains pièges. Nous allons voir ça tout de suite.

Redirection simple

La redirection la plus simple consiste à faire la chose suivante :

header("Location: fichier_destination.php");

Cette ligne dans votre fichier PHP vous conduira vers le fichier "fichier_destination.php".
Attention a ne pas envoyer au navigateur quoique ce soit avant cette ligne sinon, la redirection ne fonctionnera pas.

Redirection 301

Mais, dans l’exemple d’un annuaire où une fiche de jeu n’existe pas / plus, il est préférable de faire une redirection de type 301. Voilà comment s’y prendre :

header("Status: 301 Moved Permanently", false, 301);
header("Location: fichier_destination.php");

Et là, Google saura que la page n’existe plus et qu’il ne faut pas la référencer.

Piège à éviter

Juste un petit jeu pour finir. A votre avis, à la fin du code suivant, il y aura quoi dans le fichier "dummy.txt" ?
Soit il y aura "premier passage", soit "second passage".

$file = "dummy.txt";
$a = "premier passage";
file_put_contents($file, $a);
header("Location: test.php");
$a = "second passage";
file_put_contents($file, $a);
echo "ok";

Disons-le tout de suite, vous ne verrez pas inscrire "ok" sur votre écran.

Par contre, dans le fichier, il y aura "second passage".
Oui, une redirection n’empêche pas la continuité du code !

Erreur de débutant dirons certains. Erreur tout simplement.

La solution, mettre une fin après la redirection :

header("Location: test.php");
exit();

Et là, vous avez une jolie redirection et pas de problèmes.

L’idéal étant de faire une fonction avec possibilité de faire une redirection 301. Ça permet de mettre un test avant chaque redirection également. Utile pour débugger.