Beitrag wurde zuletzt am aktualisiert

PHP Redirect 301

PHP Redirect 301PHP Redirect 301

Permanente Weiterleitung in PHP einrichten

Bei allen serverseitigen Weiterleitungen per PHP, dem Location Header, wird standardmäßig lediglich der Statuscode 302 und somit ein temporärer Redirect, verwendet. Das ist natürlich genau dann ein Nachteil, wenn diese Weiterleitung eben nicht nur vorübergehend ist, sondern eine dauerhafte Lösung sein soll.

Dieser Fall tritt eigentlich recht häufig auf, ist einem menschlichen Besucher aber relativ egal. Dieser wird weitergeleitet und vom Statuscode bekommt er oder sie nichts mit.

Etwas anders verhält sich das bei Suchmaschinen (und natürlich auch Webbrowsern, Proxys und so weiter). Der Robot einer Suchmaschine wie z.B. Google oder Bing bekommt bei einer PHP-Standard-Weiterleitung den Status 302 übertragen und somit den Hinweis, dass die Datei zwar derzeit an einem anderen Ort liegt, es sich hierbei aber nur um eine temporäre „Ortsverlagerung“ handelt.

PHP-Redirect aus Sicht einer Suchmaschine

Um einer Suchmaschine zu signalisieren, dass die angeforderte Datei nun an einem anderen Ort liegt, und nicht mehr hier gesucht werden muss, gibt man bei der Weiterleitung den HTTP-Statuscode 301 mit. Anders als bei einem Statuscode 302 signalisiert diese Art einer Weiterleitung einem Suchmaschinen-Crawler, dass das Dokument nun unter einer neuen Adresse erreichbar ist und das künftig auch so sein wird.

Im Index einer Suchmaschine kann somit, vereinfacht ausgedrückt, die alte Adresse durch die neue Adresse ausgetauscht werden, der Rest (Platzierung, Suchbegriffe usw.) bleibt jedoch (weitgehend) wie er ist.

Ein Beispiel aus der Praxis

Eine PDF namens php-weiterleitung.pdf wird auf einer Webseite zum Download angeboten. Sucht man bei Google & Co. nach Inhalten aus dieser PDF so wird diese, je nach Relevanz und deren Platzierung, von interessierten Lesern gefunden und besucht. Nun wurde die Datei inhaltlich überarbeitet und aus der php-weiterleitung.pdf wird eine aktualisierte Version php7-weiterleitung-301.pdf.

Natürlich sollen die Suchmaschinen nun nicht das bereits gewonnene Vertrauen in diesen Inhalt verlieren, indem die alte Datei einfach vom Netz genommen wird und die Crawler sich die neue Datei selbst suchen können. Mit der neuen Dateiversion würde man im Suchindex wieder von vorn beginnen und Besucher anfangs vom Ergebnis aus der Suchmaschine sowie den Verweisen von anderen Seiten zu einer 404 Error-Meldung gelangen.

Also nehmen wir die Suchmaschinen-Crawler und unseren menschlichen Besucher an die Hand und führen sie mit unserem PHP-Script zurück auf den richtigen Weg.

Code-Beispiel für eine PHP 301-Weiterleitung

<?php
// dauerhafte PHP-Weiterleitung (Statuscode 301)
header("HTTP/1.1 301 Moved Permanently");
// Weiterleitungsziel. Wohin soll eine permanente Weiterleitung erfolgen?
header("Location:https://www.redirect301.de/php-redirect-301/");
// zur Sicherheit ein exit-Aufruf, falls Probleme aufgetreten sind
exit;
?>

oder verkürzt:

<?php
// Weiterleitungsziel inkl. 301 Status
header("Location:https://www.redirect301.de/php-redirect-301/", true, 301);
exit;
?>

Unter www.php-weiterleitung.redirect301.de/permanent.php erfolgt eine PHP-Weiterleitung zu diesem Artikel. Das dortige PHP-Script arbeitet genau mit dem hier vorgestellten PHP-Code-Beispiel.

Vor dem PHP-Code darf natürlich keine andere Ausgabe an den Browser erfolgen. Weder über ein echo noch durch versehentliche (Leer-)Zeichen vor dem php-Tag. Das exit; am Ende unterbindet eine eventuell fehlerhafte Ausführung der Weiterleitung und darauf sollte nicht verzichtet werden.

Welcher Status im HTTP-Header gesendet wurde, lässt sich u.a. mit den im Artikel Statuscode ermitteln beschriebenen Werkzeugen überprüfen und sollte letztendlich neben 301 Moved Permanently das korrekte Ziel enthalten.

Status 301 Moved Permanently

Status 301 Moved Permanently

12 Kommentare zu "PHP Redirect 301"

  1. Hey,
    danke für die super Erklärung. Ich wollte es nicht über die htaccess lösen und deine Variante mit php gefällt mir sehr gut.
    Hat diese gegenüber der htaccess Möglichkeit Nachteile?

  2. gesucht – gefunden. Danke für den Artikel :-)

  3. Ferienhaus Schwarzwald | 9. Juni 2013 um 21:41 | Antworten

    Der Ansatz mit PHP gefällt mir sehr gut. Ich habe mehr als 20 permanente Weiterleitungen. Wenn diese dauerhaft in der htaccess sind, ist das ein unnötiger Overhead der beim Laden jeder Webseite produziert wird. Daher möchte ich das mit PHP machen und in einer eigenen 404.php handeln. Was ist davon zu halten? Stephen

  4. PHP Redirect 301 | Permanente Weiterleitung in PHP

  5. Und den trailing slash nicht vergessen ;-)
    :-( meineseite.de
    :-) meineseite.de/

  6. Toller Artikel, gesucht, gefunden, umgesetzt, funktioniert ;-)

    Der Redirect per PHP ist eine sehr gute Alternative zur .htaccess, wenn man einen IIS verwendet.

  7. Christian Ludwig | 8. Februar 2017 um 18:31 | Antworten

    Hallo Daniel,

    den Statuscode brauchst du nicht extra per header setzen, das kann auch mittels drittem Parameter gemacht werden.
    Also:

    header("Location:https://www.redirect301.de/php-redirect-301/", true, 301);
    exit;

    genügt vollkommen.

  8. Hallo,

    vielen Dank für den interessanten Beitrag.
    Ich habe das Problem, dass im Index von Google Seiten wie z. B. www.domain.de/index.php?id=64 bei einem Joomla CMS erzeugt werden, welche eine Kopie der Startseite sind. Ich wollte diese mit einem einfachen 301 Redirect in der .htaccess weiterleiten:

    Redirect 301 /index.php?id=64 http://www.domain.de

    Leider funktioniert das nicht. Normale Weiterleitungen ohne „php?id“ in der URL funktionieren. Hat dafür evtl. jemand eine Lösung?

    VG
    Dennis

    • Das ist sicher „nur“ diese eine Seite, oder!? Ich kenne mich bei Joomla leider zu wenig aus, aber hier gibt es doch bestimmt eine Möglichkeit zu sagen, dass es sich hierbei um die Startseite handelt.

      Ansonsten würde es auch helfen, bei dieser Seite einen Canonicaltag festzulegen, der deine Startseite enthält. In meinem Fall zum Beispiel:
      https://www.redirect301.de/

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.


*