Comment faire une redirection en PHP ?

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

Commentaires (4)
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() !

Commentaires (12)

header( 'Location : http://www.yoursite.com/new_page.html' );

Commentaires (1)