Redirection HTTP en PHP

Avril 2013

PHP permet de créer facilement de rediriger une page vers une autre URL via les headers HTTP, qui permet de faire des redirections permanente (301) et temporaire (302).

Pour cela, il faut utiliser la fonction header() qui permet d'écrire des entêtes HTTP dans la réponse du serveur.

Redirection permanente : code HTTP 301

Une redirection permanente indique au client que l'URL de la page a changée de manière définitive. Ca permet par exemple aux moteurs de recherche comme Google de mettre à jour leur index avec la nouvelle URL de la page lorsque celle si change d'URL.

$url = 'http://www.google.fr/';

header('HTTP/1.0 301 Moved Permanently');
header('Location: '.$url);
header('Connection: close');

die();

Voici quelques explications :

  • La première entête indique la version du protocole HTTP (1.0 ou 1.1), le mieux étant de prendre 1.0 car la version 1.1 n'apporte aucune fonctionnalité au niveau de redirections, donc autant utiliser cette version qui est reconnue par les clients qui ne gèrent pas HTTP 1.1, même si c'est très rare.
  • La seconde ligne permet d'indiquer l'URL vers laquelle on redirige le client (en gros : la nouvelle adresse).
  • Le dernier header indique au client qu'il peut fermer la connexion TCP.
  • En général on arrête l'exécution du script PHP après une redirection, il est inutile de terminer le traitement pour une page qui ne sera pas affichée, puisqu'elle est redirigée. Ca permet d'éviter de faire travailler le serveur PHP pour rien.

Attention : la fonction header doit être appelée avant tout affichage (via la fonction echo ou via du code HTML en fermant les balises PHP), sinon vous aurez cette erreur :

Warning: Cannot modify header information - headers already sent by (output started at...

La page du jour est différence entre format xls et xlsx, bonne lecture.

Redirection temporaire : code HTTP 302

Une redirection permanente fonctionne de la même manière, sauf que les moteurs de recherche ne l'interprètent pas de la même façon : ils ne tiennent pas compte de la nouvelle URL si la redirection est temporaire.

$url = 'http://www.google.fr/';

header('HTTP/1.0 302 Found');
header('Location: '.$url);
header('Connection: close');

On peut aussi se contenter du seul header Location, car PHP utilise le code 302 par défaut. Attention : le status Moved temporarily n'est pas valide, il faut bien utiliser Found.

Tester une redirection HTTP

Pour tester si une redirection fonctionne, vous pouvez utiliser une extension pour votre navigateur, consultez cette page pour en savoir plus : Tester et vérifier une redirection (301, 302).

Découvrez ce tutoriel photoshop : effet magic light à lire tout de suite !

0 commentaire
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré