Zusammenfassung der vorhandenen Antworten und meine eigene Meinung dazu:
1. Grundlegende Antwort
Sie können die header()
Funktion, um einen neuen HTTP-Header zu senden, aber dieser muss vor jeglichem HTML oder Text an den Browser gesendet werden (also vor der <!DOCTYPE ...>
Erklärung, zum Beispiel).
header('Location: '.$newURL);
2. Wichtige Details
sterben() o exit()
header("Location: https://example.com/myOtherPage.php");
die();
Warum Sie Folgendes verwenden sollten die()
o exit()
: Das tägliche WTF
Absolute oder relative URL
Seit Juni 2014 können sowohl absolute als auch relative URLs verwendet werden. Siehe RFC 7231 die das alte System ersetzt hatte RFC 2616 , wo nur absolute URLs erlaubt waren.
Status Codes
PHPs "Location"-Kopfzeile verwendet immer noch die HTTP 302 -Redirect-Code verwenden, handelt es sich um eine "temporäre" Weiterleitung, die Sie möglicherweise nicht verwenden sollten. Sie sollten entweder 301 (permanente Weiterleitung) oder 303 (andere).
Anmerkung: W3C-Erwähnungen dass der 303-Header mit "vielen Vor-HTTP/1.1-Benutzeragenten" nicht kompatibel ist. Die derzeit verwendeten Browser sind alle HTTP/1.1-Benutzeragenten. Dies gilt nicht für viele andere User Agents wie Spider und Robots.
3. Dokumentation
HTTP-Kopfzeilen und die header()
Funktion in PHP
4. Alternativen
Sie können die alternative Methode der http_redirect($url);
die den PECL-Paket pecl installiert werden.
5. Hilfsfunktionen
Diese Funktion enthält nicht den Statuscode 303:
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('https://example.com/', false);
Dies ist flexibler:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
6. Abhilfe
Wie erwähnt header()
Umleitungen funktionieren nur, bevor etwas ausgeschrieben wird. Sie schlagen normalerweise fehl, wenn Mitten in HTML aufgerufen Ausgabe. Dann könnten Sie einen HTML-Header-Workaround verwenden (nicht sehr professionell!) wie:
<meta http-equiv="refresh" content="0;url=finalpage.html">
Oder sogar eine JavaScript-Weiterleitung.
window.location.replace("https://example.com/");
0 Stimmen
Sie können die Kopfzeile in PHP aktualisieren: Kopfzeile
17 Stimmen
@Sam: nur als Nebenknoten, nicht implementieren jede Art von
protection from unauthorized users
über eine Weiterleitung; so sollte es nicht gemacht werden ;)10 Stimmen
@Strae Was ist falsch daran, Seiten mit Redirect zu schützen? Was ist dann der beste Weg?
9 Stimmen
@PravindaAmarathunga Die Umleitung ist eines der Elemente, aber nicht das einzige. Achten Sie nur darauf, dass geschützte Elemente für unberechtigte Benutzer überhaupt nicht ausgegeben werden; die Weiterleitung des Browsers kann z. B. clientseitig deaktiviert werden: Wenn der Browser die Weiterleitung nicht vornimmt und die ursprüngliche Seite ganz normal ausgegeben wird, was würde der Benutzer dann sehen? CMS führen in der Regel die Weiterleitung durch und druckt geschützte Elemente nicht aus, sondern ersetzt die normale Ausgabe durch eine Höflichkeitsmeldung.
2 Stimmen
@PravindaAmarathunga überprüfen Sie den Link aus der Antwort von Markus: thedailywtf.com/Artikel/WellIntentioned-Destruction.aspx
0 Stimmen
Problem gelöst - es sollte sein $options = array('http' => array('method'=>"GET", 'header' => array("Cookie: " . $_SERVER["HTTP_COOKIE"], "Authorization: Basic " . base64_encode("$username:$password")) ) );