Beitrag wurde zuletzt am aktualisiert

PHP Redirect 301

PHP 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;
?>

bzw. allgemein gültig, um z.B. eine Weiterleitung aller Aufrufe per https zu realisieren:

<?php
if($_SERVER["HTTPS"] != "on") {
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], true, 301);
    exit();
}

Unter php.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.

Statuscode 301 Moved Permanently

Status 301 Moved Permanently

20 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/

  9. Danke … eine saubere Lösung ganz nach meiner Vorstellung

  10. Hallo Daniel, ich hoffe du kannst mir weiterhelfen. Ich suche mir nämlich die Finger blutig und kann keine Lösung zu meinem „Problem“ finden.

    Ich biete auf einer meiner Webseiten eine PDF zum Download an. Diese Datei befindet sich prominent platziert auch im Index von Google und kann somit (leider) aus den Suchergebnissen heraus direkt geöffnet werden.

    Ebenso ist es natürlich denkbar, dass diese Datei auch auf anderen Webseiten direkt verlinkt wurde und das Öffnen der PDF-Datei (an meiner Seite vorbei) möglich ist.

    Nun suche ich eine Möglichkeit, dass die PDF nur geöffnet werden kann, wenn der Referrer meine eigene Seite ist. Stichwort: Same-Origin… oder?!

    Ziel ist es, dass beim Aufruf des Suchergebnisses oder einer direkten Verlinkung der Datei, der Client auf eine Seite auf meiner Webseite umgeleitet wird und erst dort die PDF öffnen beziehungsweise downloaden kann.

    Ist solch eine Um- bzw. Weiterleitung möglich? Und wenn ja wie?

    Ich würde mich freuen, wenn du mir da etwas Unterstützung geben könntest.

    Wie auch immer, ich sag schon mal: DANKE!

    Grüße, Torsten …

  11. Ich bevorzuge zwar htaccess weiterleitungen, aber für den Falle – dass eben PHP dazu genutzt werden sollte, ist es ein super Beitrag. Danke fürs teilen.

  12. Die Bearbeitung von mehrere Weiterleitungen ist deutlich einfacher und schneller wenn man die htaccess dazu verwendet. Daher die Änderung zügig geht wenn die Weiterleitungen geändert werden sollen. Die PHP Weiterleitung ist optimal und sicherer, für Link die nie mehr geändert werden sollen.

  13. Die Verwendung von htaccess ist wirklich hilfreich, wenn man mehrere Umleitungen bearbeitet und den Besucher auf die nächste relevante Seite weiterleitet.

    Vielen Dank für den tollen Beitrag!

    Grüße aus München,
    Timo

  14. Die Bearbeitung mehrerer Weiterleitungen ist wesentlich einfacher und schneller, wenn man dafür die htaccess verwendet. Aus diesem Grund ist die Änderung schnell, wenn eine Änderung der Weiterleitungen erforderlich ist. Die PHP-Weiterleitung ist optimal und sicherer für Links, die nie mehr geändert werden sollen.

    Danke für den super Beitrag!

    Viele Grüße aus Frankfurt,
    Sebastian

  15. Guter Artikel, danke dafür!
    Denkst Du, dass es fürs SEO einen Unterschied macht, ob man Redirects über PHP oder.htaccess macht?

    Grüße
    Viktor

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.