So erstellen Sie eine PHP-Weiterleitung

So erstellen Sie eine PHP-Weiterleitung

Eine PHP-Weiterleitung ist eine serverseitige Methode, bei der die PHP-Funktion header() verwendet wird, um den Browser eines Benutzers auf eine andere URL weiterzuleiten.

Sie dient hauptsächlich dazu, den Ablauf zu steuern, die Benutzererfahrung durch die Weiterleitung der Benutzer zu den richtigen Inhalten zu verbessern und die Suchmaschinenoptimierung (SEO) zu unterstützen, indem Suchmaschinen über Seitenaktualisierungen informiert werden.

Um eine Weiterleitung in PHP einzurichten, senden Sie mit der Funktion header() einen HTTP-Location-Header an den Browser.

Dieser Befehl muss ausgeführt werden, bevor HTML- oder Textdaten gesendet werden. Es empfiehlt sich, unmittelbar danach den Befehl exit; einzufügen, um die Ausführung des Skripts zu beenden.

So richten Sie eine Weiterleitung mit der PHP-Funktion header() ein

Um einen Benutzer in PHP auf eine andere Seite weiterzuleiten, geben Sie mit der Funktion header() das neue Ziel an.

Die grundlegende Syntax sieht wie folgt aus:

<?php
// Redirect to a new page
header("Location: newpage.php");
exit; // This stops the script from executing after the redirect
?>

Die wichtigste Regel für die Funktion header() lautet: Rufen Sie sie auf, bevor Sie eine Ausgabe an den Browser senden. Das gilt für HTML-Code, jegliche Leerzeichen und sogar für eine echo-Anweisung.

Einfache Beispiele für PHP-Weiterleitungen

Das folgende einfache PHP-Beispiel zeigt eine Weiterleitung auf eine andere Seite derselben Website über eine relative URL:

<?php
// Redirects to contact-us.php in the same directory
header("Location: contact-us.php");
exit;
?>

Das folgende Beispiel zeigt eine Weiterleitung auf eine völlig andere Website über eine absolute URL:

<?php
// Redirects to Google
header("Location: https://www.google.com");
exit;
?>

Important

Fügen Sie unmittelbar nach der Funktion header() immer exit; oder die(); ein. Dadurch wird verhindert, dass der Rest des Skripts weiter ausgeführt wird. Dies ist eine wichtige Maßnahme für die Sicherheit und Ablaufsteuerung.

PHP-Weiterleitung mit Statuscodes (301 oder 302)

Um in PHP eine Weiterleitung mit einem bestimmten HTTP-Statuscode wie 301 oder 302 einzurichten, fügen Sie den Statuscode als optionalen Parameter zur Funktion header() hinzu.

Standardmäßig sendet header(‘Location: …’) eine temporäre 302-Weiterleitung. Um einen bestimmten Statuscode anzugeben, verwenden Sie die optionalen Parameter der Funktion: header(“Location: URL”, true, 301).

Der Parameter true sorgt dafür, dass die Funktion einen bereits vorhandenen gleichartigen Header ersetzt. 301 ist der HTTP-Statuscode, der gesendet wird.

Verwenden Sie eine permanente 301-Weiterleitung, wenn sich die URL einer Seite dauerhaft geändert hat. Dies ist für die Suchmaschinenoptimierung (SEO) von großer Bedeutung: Suchmaschinen werden dadurch angewiesen, ihren Index zu aktualisieren, und Ranking-Signale werden an die neue URL weitergegeben.

Wählen Sie eine temporäre 302-Weiterleitung, wenn Sie nur vorübergehend weiterleiten, etwa wegen Wartungsarbeiten, und die alte URL später wieder verwenden möchten. Damit teilen Sie Suchmaschinen mit, dass sie ihren Index nicht aktualisieren sollen, da die ursprüngliche Seite wieder verfügbar sein wird.

<?php
// Temporary redirect
header("Location: https://www.domain.tld/maintenance.php", true, 302);
exit;
?>

Wenn die Fehlermeldung „Headers already sent“ erscheint, kann dies an Leerzeichen oder anderen Einstellungen in Ihrer php.ini-Datei liegen. Prüfen Sie in diesem Fall Ihre PHP-Konfiguration, um die Ursache des Fehlers zu ermitteln.

Was sind bedingte Weiterleitungen in PHP?

Bei bedingten Weiterleitungen in PHP verwenden Sie if-Anweisungen oder andere logische Ausdrücke, um zu bestimmen, ob eine Weiterleitung erfolgen soll.

Auf diese Weise können Sie dynamische, an bestimmte Bedingungen angepasste Navigationsabläufe für Ihre Benutzer erstellen und sie anhand bestimmter Kriterien auf die richtige Seite weiterleiten.

Sie können beispielsweise prüfen, ob ein Benutzer angemeldet ist, bevor Sie eine Seite anzeigen, die nur Mitgliedern zugänglich ist. Oder Sie leiten Benutzer auf eine für Mobilgeräte optimierte Version Ihrer Website weiter, wenn sie über ein Smartphone darauf zugreifen.

PHP-Weiterleitung nach der Anmeldung oder auf Sitzungsbasis

Um einen Benutzer nach der Anmeldung oder basierend auf einer Sitzung in PHP weiterzuleiten, prüfen Sie eine $_SESSION-Variable, um festzustellen, ob der Benutzer authentifiziert ist.

Starten Sie dazu die Sitzung am Anfang Ihres Skripts mit session_start();.

Das folgende Skript prüft, ob in der Sitzung eine user_id festgelegt ist. Ist dies nicht der Fall, wird der Benutzer auf die Anmeldeseite weitergeleitet.

<?php
session_start();
// Check if the user is logged in
if (!isset($_SESSION['user_id'])) {
// User is not logged in, redirect to login page
header("Location: login.php");
exit;
}
// If we get here, the user is logged in
// Continue loading the protected page content...
echo "Welcome to the members-only area!";
?>

Auf der Seite zur Verarbeitung der Anmeldung leiten Sie den Benutzer dagegen zum Dashboard weiter, nachdem Sie seine Anmeldedaten erfolgreich überprüft und die Sitzung eingerichtet haben:

<?php
// (After verifying username and password...)
// Set session variable
$_SESSION['user_id'] = $user_id_from_db;
// Redirect to the user dashboard
header("Location: dashboard.php");
exit;
?>

PHP-Weiterleitung anhand des Benutzergeräts

Um Benutzer in PHP anhand ihres Geräts weiterzuleiten, prüfen Sie die Zeichenfolge HTTP_USER_AGENT. Sie ist in der superglobalen Variable $_SERVER verfügbar und enthält Informationen über den Browser und das Betriebssystem des Benutzers.

Das User-Agent-Sniffing kann zwar unzuverlässig sein, für einfache Weiterleitungen kann jedoch eine Prüfung auf gängige Schlüsselwörter für Mobilgeräte ausreichen.

<?php
// Get the user agent string
$user_agent = $_SERVER['HTTP_USER_AGENT'];
// Array of mobile keywords
$mobile_keywords = ['Mobile', 'Android', 'iPhone', 'iPad', 'Windows Phone'];
$is_mobile = false;
// Check if any mobile keyword is present in the user agent
foreach ($mobile_keywords as $keyword) {
if (strpos($user_agent, $keyword) !== false) {
$is_mobile = true;
break; // Found a mobile keyword, no need to check further
}
}
// If it's a mobile device, redirect to the mobile site
if ($is_mobile) {
header("Location: https://m.domain.tld");
exit;
}
// Otherwise, load the desktop site
// ...
?>

Important

Diese Methode ist nicht vollkommen zuverlässig. Eine robustere Lösung ist Responsive Design, bei dem sich das Layout Ihrer Website an die Bildschirmgröße anpasst, sodass keine Weiterleitungen erforderlich sind.

Welche Alternativen gibt es für Weiterleitungen in PHP?

header(‘Location: …’) ist die standardmäßige und robusteste Methode für serverseitige Weiterleitungen in PHP. Es gibt jedoch Alternativen, die vor allem für clientseitige Weiterleitungen oder als Ausweichlösungen infrage kommen.

Diese Alternativen sind nützlich, wenn bereits eine Ausgabe gesendet wurde und Sie die Funktion header() deshalb nicht mehr verwenden können.

  • JavaScript-Weiterleitung. Die Weiterleitung erfolgt vollständig im Browser des Benutzers. Für die Suchmaschinenoptimierung (SEO) ist diese Methode weniger geeignet, da sie keinen 301- oder 302-Statuscode übermittelt, von Crawlern möglicherweise nicht erkannt wird und nicht funktioniert, wenn JavaScript deaktiviert ist. Sie eignet sich jedoch als Ausweichlösung, wenn die Seite bereits mit dem Laden begonnen hat.
<script>
window.location.replace("https://www.domain.tld/new-page.html");
</script>
  • HTML-Meta-Refresh. Dabei handelt es sich um ein älteres HTML-Tag, das den Browser anweist, die Seite nach einer festgelegten Zeitspanne zu aktualisieren oder zu einer neuen URL weiterzuleiten. Eine Verzögerung von 0 Sekunden führt zu einer sofortigen Weiterleitung.
<meta http-equiv="refresh" content="0;url=https://www.domain.tld/new-page.html">
  • Framework-Hilfsfunktionen. Moderne Frameworks bieten häufig integrierte Funktionen, die sich einfacher handhaben lassen als direkte Header-Aufrufe. Verwenden Sie beispielsweise den Redirect-Helper von CodeIgniter oder Laravels redirect()-Hilfsfunktion, die nach der Installation von Composer zur Verfügung steht.

Die Funktion header() sollte immer Ihre erste Wahl sein. Verwenden Sie clientseitige Alternativen nur, wenn eine serverseitige Weiterleitung technisch nicht möglich ist, etwa weil die Header bereits gesendet wurden.

Verwenden Sie clientseitige Weiterleitungen niemals für sensible Vorgänge wie Authentifizierung oder Zugriffskontrolle, da sie sich leicht umgehen lassen.

Aus Gründen der Barrierefreiheit können einige Screenreader Meta-Refreshes besser verarbeiten als JavaScript-Weiterleitungen. Beide Methoden sind jedoch weniger sicher als header().

Nächste Schritte: So beheben Sie PHP-Fehler

Fehler bei Weiterleitungen entstehen hauptsächlich durch Fehlkonfigurationen und Probleme mit der Ausgabe, denn Sie dürfen keine Ausgabe an den Browser senden, bevor Sie die Funktion header() aufrufen.

Der häufigste Fehler ist:

Warning: Cannot modify header information - headers already sent

Diese Fehlermeldung bedeutet, dass bereits etwas an den Browser gesendet wurde, bevor die Funktion header() aufgerufen wurde. Mögliche Ursachen sind:

  • HTML. Jegliche HTML-Tags, selbst eine <!DOCTYPE>-Deklaration.
  • Leerzeichen. Ein Leerzeichen oder Zeilenumbruch vor dem öffnenden <?php-Tag in einer beliebigen Datei.
  • PHP-Ausgabe. Jegliche echo– oder print-Anweisung.
  • Fehlermeldungen. Eine PHP-Notice oder -Warnung wird ausgegeben.
  • BOM (Byte-Order-Mark). Unsichtbare Zeichen, die hinzugefügt werden, wenn eine Datei mit UTF-8-BOM-Kodierung gespeichert wird. Dies kann bei einigen älteren Texteditoren vorkommen.

Um den Fehler zu beheben, verfolgen Sie die Ausführung Ihres Codes und ermitteln Sie, an welcher Stelle die erste Ausgabe gesendet wird. Prüfen Sie auf echo– oder print-Anweisungen, HTML außerhalb der <?php … ?>-Tags und Leerzeichen vor dem öffnenden <?php-Tag.

Wenn der Fehler weiterhin auftritt, prüfen Sie alle Dateien, die vor der Ausführung der Weiterleitungslogik eingebunden oder per require geladen werden.

Alle Tutorial-Inhalte auf dieser Website unterliegen Hostingers strengen redaktionellen Standards und Normen.

Author
Erstellt von

Faradilla Ayunindya

Faradilla, auch bekannt als Ninda, ist Content Marketing Specialist bei Hostinger mit über fünf Jahren Erfahrung und einem zehnjährigen Hintergrund als Linguistin. Sie möchte Technologie für alle zugänglich machen, indem sie komplexe Anleitungen in klare und leicht verständliche Schritt-für-Schritt-Guides verwandelt. In ihrer Freizeit interessiert sie sich für Biowissenschaften oder schaut gerne lustige Tiervideos. Vernetzen Sie sich mit ihr auf LinkedIn.

Was unsere Kunden sagen

Comments

0 responses

Write a respond

Please fill the required fields.Bitte akzeptieren Sie die Datenschutzklausel.Bitte füllen Sie die erforderlichen Felder aus und akzeptieren Sie die Datenschutzklausel.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.