HOWTO · PHP
Umleitung in PHP
Dieses Tutorial zeigt, wie Sie einen Benutzer von einer Seite auf eine andere Seite in PHP umleiten
Auf dieser Seite
Um eine Anfrage in PHP weiterzuleiten, senden Sie mit header() einen Location-Antwortheader, bevor das Skript HTML oder andere Inhalte ausgibt, und beenden Sie anschließend das Skript. Das Beispiel unten leitet den Browser zu einer Ziel-URL weiter. Legen Sie die PHP-Datei auf einem lokalen Webserver ab und öffnen Sie sie im Browser, um die Weiterleitung zu sehen.
Mit PHPs Funktion header() zu einer URL weiterleiten
Die Funktion header() sendet einen HTTP-Antwortheader. Für eine Weiterleitung heißt das Header-Feld Location; sein Wert ist die Ziel-URL. PHP muss diesen Header senden, bevor Inhalte des Antworttexts ausgegeben werden – dazu zählen auch Leerzeichen außerhalb von PHP-Tags. Platzieren Sie den Weiterleitungscode am Anfang des Request-Handlers, also vor Vorlagen oder sonstiger Seitenausgabe.
Dieses eigenständige Beispiel verwendet eine Ziel-URL in einer Variablen. Der Aufruf von exit beendet die aktuelle Anfrage, sobald die Antwort vorbereitet ist. Der restliche Seiteninhalt wird dadurch nicht so ausgeführt, als hätte keine Weiterleitung stattgefunden. Die bereitgestellte Laufzeitprüfung hat dieses Beispiel erfolgreich ausgeführt; dabei entstand keine Standardausgabe. Eine Weiterleitung wird über die HTTP-Antwort übertragen und nicht als Text ausgegeben. Wenn Sie die PHP-Datei über Ihren lokalen Webserver im Browser öffnen, sollte der Browser zum Beispielziel navigieren.
<?php
$url = 'https://example.com/';
header('Location: ' . $url);
exit;
?>
Verwenden Sie eine URL, zu der Ihre Anwendung Nutzer weiterleiten darf. Stammt das Ziel aus Request-Daten, prüfen Sie es anhand einer Zulassungsliste oder leiten Sie es aus vertrauenswürdigen Anwendungsrouten ab. Beliebige Nutzereingaben für eine Weiterleitung zu übernehmen, kann Besucher auf eine unerwünschte Website führen. Für eine Route innerhalb derselben Anwendung reicht häufig ein Pfad wie /account/.
Eine PHP-Weiterleitungsfunktion mit HTTP-Statuscode erstellen
Eine wiederverwendbare redirect-Hilfsfunktion kann sowohl das Ziel als auch den Antwortstatus entgegennehmen. Das dritte Argument von header() ist der Statuscode; das zweite Argument legt fest, ob ein Header mit demselben Namen einen früheren ersetzt. Die folgende Funktion verwendet standardmäßig 302, einen häufig genutzten Status für temporäre Weiterleitungen. Bei Bedarf können Sie einen anderen Status übergeben.
<?php
function redirect(string $url, int $statusCode = 302): void
{
header('Location: ' . $url, true, $statusCode);
exit;
}
redirect('https://example.com/', 301);
?>
Das Beispiel übergibt 301, um die Weiterleitung als dauerhaft zu kennzeichnen. Verwenden Sie diesen Status nur, wenn die Änderung bestehen bleiben soll; Browser und andere Clients können sich dauerhafte Weiterleitungen merken. 302 steht für eine temporäre Weiterleitung und ist die bessere Voreinstellung, wenn sich das Ziel noch ändern kann. Das PHP-Handbuch zu header() erläutert die Funktionsparameter. MDNs Referenz zu 301 beschreibt den permanenten Status.
Die bereitgestellte Laufzeitprüfung hat auch dieses Hilfsfunktionsbeispiel erfolgreich ausgeführt; dabei entstand keine Standardausgabe. Der Weiterleitungsstatus und der Location-Header gehören zur HTTP-Antwort und werden nicht als Text ausgegeben. Rufen Sie die PHP-Datei über einen lokalen Webserver auf, um die Navigation im Browser zu beobachten. Nach dem Setzen des Antwortheaders beendet die Funktion die Anfrage. Prüfen Sie in einer echten Anwendung die URL, bevor Sie die Hilfsfunktion aufrufen, und wählen Sie einen Status, der dazu passt, ob die Änderung temporär oder dauerhaft ist. Der Location-Header und der Status sind Teil der HTTP-Antwort. Daher funktioniert dieses Verfahren, bevor der Browser den Seiteninhalt erhält.
JavaScript als clientseitige Ausweichlösung für Weiterleitungen verwenden
Wenn eine serverseitige Weiterleitung nicht verfügbar ist, kann eine Seite den Browser mit window.location zur Navigation auffordern. Dabei handelt es sich um clientseitige Navigation: PHP sendet Seiteninhalt, und der Browser führt das Skript aus. Das ist keine PHP-Ausgabepufferung und macht aus der HTTP-Antwort keine serverseitige Weiterleitung. Außerdem muss JavaScript aktiviert sein. Verwenden Sie daher header() in PHP, wenn der Server das Ziel festlegen kann, bevor er die Seite sendet.
Das folgende Snippet für eine Browserseite zeigt diese Ausweichlösung. Fügen Sie es in eine Seite ein, die Ihr lokaler Webserver bereitstellen kann, und öffnen Sie die Seite mit aktiviertem JavaScript im Browser, um die Navigation zum Ziel zu sehen. Das Snippet ist als Browser-Quelltext angegeben und wurde für diesen Artikel nicht ausgeführt.
<script>
window.location = "https://example.com/";
</script>
Da dieser Code im Browser ausgeführt wird, kann er keinen HTTP-Weiterleitungsstatus wie 301 als Teil der bereits empfangenen Antwort senden. Halten Sie das Ziel fest oder prüfen Sie jeden Wert, aus dem Sie es zusammensetzen – genauso wie bei einer serverseitigen Weiterleitung. Verwenden Sie diese Ausweichlösung nur, wenn clientseitige Navigation zur Seite passt. Besucher, die JavaScript deaktiviert haben, bleiben auf der ursprünglichen Seite.