Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP Weiterleitung: Redirects mit header() richtig einsetzen

Sie befinden sich: Home > Php Tutorial > PHP Weiterleitung: Redirect...

PHP Weiterleitung: Redirects mit header() richtig einsetzen
Eintrag am:
12.05.2026
Hits / Besucher:
15
Sprache:
  Deutsch
Tutorial Art:
eigenes
Eingetragen von:
 
Beschreibung

Weiterleitungen leiten Besucher automatisch von einer URL zu einer anderen weiter, etwa nach einem Formularversand oder bei geänderten Seitenstrukturen. In PHP übernimmt die Funktion header() diese Aufgabe, indem sie einen HTTP Location-Header an den Browser sendet. In diesem Tutorial lernst du, wie Redirects mit header() funktionieren, welche HTTP-Statuscodes sich eignen und welche typischen Fehler auftreten.

Illustration zum Tutorial: PHP Weiterleitung: Redirects mit header() richtig einsetzen

Der folgende Abschnitt zeigt die grundlegende Syntax eines Redirects mit header() und erklärt, warum exit dabei unverzichtbar ist.

Weiterleitung mit header() in PHP

Für eine Weiterleitung wird der Location-Header mit der Ziel-URL gesetzt. Unmittelbar nach dem Aufruf muss das Skript mit exit oder die beendet werden, da PHP sonst den restlichen Code weiter ausführt.

<?php

/* Einfache Weiterleitung auf eine andere Seite */
header('Location: https://www.example.com/neue-seite.php');
exit;

Ohne exit wird der nachfolgende Code trotz gesetztem Location-Header ausgeführt. Nach jeder Weiterleitung mit header() folgt deshalb sofort exit oder die.

<?php

/* Weiterleitung nach erfolgreicher Formularverarbeitung */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
/* Formulardaten verarbeiten */
$name = htmlspecialchars($_POST['name'] ?? '');

/* Nach Verarbeitung weiterleiten (Post-Redirect-Get-Pattern) */
header('Location: /danke.php');
die;
}

Der Unterschied zwischen 301 und 302 Redirects

Standardmäßig sendet header('Location: ...') einen 302-Statuscode (Temporary Redirect). Für dauerhafte Weiterleitungen muss der Statuscode 301 (Moved Permanently) explizit angegeben werden.

<?php

/* 301: Dauerhafte Weiterleitung (wird vom Browser gecacht) */
header('Location: https://www.example.com/neue-url.php', true, 301);
exit;

/* 302: Temporaere Weiterleitung (Standard, wird nicht gecacht) */
header('Location: https://www.example.com/wartung.php', true, 302);
exit;

Ein 301-Redirect signalisiert Suchmaschinen, dass die alte URL dauerhaft ersetzt wurde. Der Browser speichert diese Weiterleitung im Cache und ist damit ideal für SEO-relevante URL-Änderungen. Ein 302-Redirect wird nicht gecacht und eignet sich für temporäre Umleitungen, etwa während Wartungsarbeiten.

flowchart TD
    A[Browser ruft URL auf] --> B{Statuscode}
    B -->|301| C[Browser cacht Redirect]
    B -->|302| D[Browser cacht nicht]
    C --> E[Ziel-URL laden]
    D --> E
    C --> F[Direkt zur neuen URL]
    D --> G[Erneut alte URL fragen]

Der Fehler "headers already sent" und wie man ihn vermeidet

Der häufigste Fehler bei header() lautet: "Cannot modify header information - headers already sent". Er tritt auf, wenn vor dem Aufruf bereits eine Ausgabe an den Browser gesendet wurde, etwa durch echo, HTML-Code oder Leerzeichen vor dem öffnenden PHP-Tag.

Die Lösung ist Output Buffering mit ob_start(). Diese Funktion fängt alle Ausgaben in einem Puffer ab, sodass Header auch nach einer Ausgabe noch gesendet werden können.

<?php

/* Output Buffering aktivieren */
ob_start();

/* Ausgabe, die normalerweise den Fehler ausloesen wuerde */
echo 'Diese Ausgabe wird gepuffert';

/* header() funktioniert trotzdem, weil die Ausgabe im Puffer liegt */
header('Location: /zielseite.php');
exit;

Besser ist es jedoch, das Skript so zu strukturieren, dass Weiterleitungen immer vor jeder Ausgabe stehen. Frameworks wie Laravel oder Symfony setzen dieses Prinzip konsequent um.

Alternativen zur PHP-Weiterleitung (Meta-Refresh, JavaScript, .htaccess)

Nicht immer ist header() die beste Wahl. Ein Meta-Refresh-Tag im HTML-Head leitet den Browser nach einer definierten Anzahl von Sekunden weiter. JavaScript kann Weiterleitungen clientseitig umsetzen. Am effizientesten sind jedoch Weiterleitungen über die .htaccess-Datei, da sie greifen, bevor PHP überhaupt gestartet wird. Die .htaccess-Methode spart Serverressourcen und ist für dauerhafte URL-Änderungen die bevorzugte Lösung.

Query-Parameter bei Weiterleitungen übergeben

Bei einer Weiterleitung müssen häufig zusätzliche Informationen an die Zielseite übermittelt werden. Die Funktion http_build_query() erstellt einen korrekt kodierten Query-String aus einem Array.

<?php

/* Query-Parameter sicher aufbauen und weiterleiten */
$params = [
'status' => 'erfolg',
'meldung' => 'Daten gespeichert'
];

$zielUrl = '/ergebnis.php?' . http_build_query($params);
header('Location: ' . $zielUrl);
exit;

Die Funktion kodiert Sonderzeichen automatisch und schützt vor Injection-Angriffen.

Häufige Fehler und Stolperfallen (Redirect-Schleifen, Open Redirect)

Redirect-Schleifen entstehen, wenn Seite A auf Seite B weiterleitet und Seite B zurück auf Seite A. Der Browser bricht nach einigen Durchläufen mit einer Fehlermeldung ab.

Eine weitere Gefahr sind Open-Redirect-Schwachstellen. Sie entstehen, wenn die Ziel-URL aus Benutzereingaben stammt und nicht validiert wird. Die Lösung ist eine Whitelist erlaubter Ziel-URLs.

<?php

/* Open-Redirect-Schutz durch Whitelist */
$erlaubteZiele = [
'startseite' => '/index.php',
'profil' => '/profil.php',
'dashboard' => '/dashboard.php'
];

$ziel = $_GET['redirect'] ?? 'startseite';

if (isset($erlaubteZiele[$ziel])) {
header('Location: ' . $erlaubteZiele[$ziel]);
exit;
}

/* Fallback bei unbekanntem Ziel */
header('Location: /index.php');
exit;

Eine URL aus $_GET oder $_POST darf niemals direkt in den Location-Header übernommen werden.

Fazit

Die Funktion header() ist das Standardwerkzeug für Weiterleitungen in PHP. Der Aufruf muss vor jeder Ausgabe erfolgen, und exit ist nach dem Location-Header zwingend erforderlich. Für dauerhafte URL-Änderungen eignet sich der Statuscode 301, für temporäre Umleitungen 302. Bei dauerhaften Weiterleitungen ist eine .htaccess-Regel effizienter als eine PHP-Lösung. Query-Parameter werden sicher mit http_build_query() aufgebaut, und Open-Redirect-Schwachstellen lassen sich durch eine Whitelist zuverlässig verhindern.

 


 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.