Résumé des questions / réponses en plus de ma propre deux cents:
1. Réponses de base
Vous pouvez utiliser la fonction header() pour envoyer un en-tête HTTP, mais cela doit être envoyé au navigateur avant tout code HTML ou texte (donc avant l' <!DOCTYPE ...>
déclaration, par exemple).
header('Location: '.$newURL);
2. Détails importants
die()
header("Location: http://mydomain.com/myOtherPage.php");
die();
Pourquoi devriez-vous utiliser die()
: Le Quotidien WTF
URL absolue
L'URL doit être absolue. Voir la RFC 2616. Mais dans la plupart des cas une URL relative sera accepté.
Les Codes D'État
PHP est le "Lieu"de l'en-tête utilise toujours le HTTP 302-code de redirection, mais ce n'est pas celui que vous devez utiliser. Vous devriez 301 (redirection permanente) ou 303 (autres).
Remarque: le W3C mentionne que le 303-d'en-tête est incompatible avec "beaucoup de pré-HTTP/1.1, les agents utilisateurs. Actuellement utilisé des navigateurs sont tous HTTP/1.1, les agents utilisateurs. Ce n'est pas vrai pour beaucoup d'autres agents utilisateurs comme les araignées et les robots.
3. La Documentation
Les en-Têtes HTTP et la fonction header() en PHP
4. Alternatives
Vous pouvez utiliser la méthode alternative de http_redirect($url); qui a besoin de la PECL paquet pecl à être installé.
5. Des Fonctions D'Assistance
Cette fonction n'intègre pas la 303 code d'état:
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('http://www.google.com/', false);
C'est plus souple:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
6. Solution de contournement
Comme mentionné en-tête() redirige seulement le travail avant tout est écrit. Ils échouent en général si invoquée inmidst HTML de sortie. Ensuite, vous pouvez utiliser un en-tête HTML d'une solution (pas très professionnel!) comme:
<meta http-equiv="Location" content="http://example.com/">
Ou une redirection Javascript même.