Est-il possible de rediriger un utilisateur vers une autre page en utilisant le langage PHP ?
Disons que l'utilisateur va sur www.example.com/page.php
et que je veux le rediriger vers www.example.com/index.php
, comment puis-je le faire sans utiliser un meta refresh ? Est-ce possible ?
Cela pourrait même protéger mes pages des utilisateurs non autorisés.
Utilisez la [fonction header()
][1] pour envoyer un [en-tête HTTP Location
][2] :
header('Location: '.$newURL);
Contrairement à ce que certains pensent, die()
n'a rien à voir avec la redirection. Utilisez-le seulement si vous voulez rediriger au lieu de l'exécution normale.
Fichier example.php :
<?php
header('Location: static.html');
$fh = fopen('/tmp/track.txt', 'a');
fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
fclose($fh);
?>
Résultat de trois exécutions :
bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00
Reprise &mdash ; L'obligation de die()
/exit()
est une légende urbaine qui n'a rien à voir avec le PHP actuel. Cela n'a rien à voir avec le fait que le client "respecte" l'en-tête Location:
. L'envoi d'un en-tête n'arrête pas l'exécution de PHP, quel que soit le client utilisé.
[1] : http://www.php.net/manual/en/function.header.php [2] : http://en.wikipedia.org/wiki/List_of_HTTP_headers#Responses
function Redirect($url, $permanent = false)
{
if (headers_sent() === false)
{
header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
}
exit();
}
Redirect('http://www.google.com/', false);
N'oubliez pas de die()/exit() !