PHP: Eine Seite korrekt auf eine Neue umleiten - "301 Moved Permanently"
Oft ist es notwendig, dass man eine alte (ungültige?) URL auf eine Neue umlenkt, damit die Besucher keine unnötige 404 Not Found Meldung bekommen. Es kann auch sehr interessant für Suchmaschinenoptimierungen (SEO) sein, da die Suchmaschinen unter Umständen die veraltete URL aufrufen und die Adresse aus dem Index nehmen, obwohl an einem anderen Ort eine neue Version davon existiert. Weiters kann man doppelten Inhalt (z.B. Domain mit oder ohne www geschrieben) vermeiden. Wie man solche Umleitungen mit PHP realisiert erkläre ich euch hier in 2 Praxisnahen Beispielen.
Hinweis: Die Umleitungen funktionieren auch mit suchmaschinenfreundlichen (SEF) URLs.
Wichtig: Die Umleitungen müssen möglichst ganz am Anfang der PHP-Datei eingebunden werden, zum Beispiel ganz oben in der index.php. Wird vor der Umleitung schon HTML (oder auch nur ein leerer Zeilenumbruch) ausgegeben, funktioniert die Umleitung nicht und man erhält einen PHP-Fehler.
Beispiel 1: Domain wurde ohne www aufgerufen, automatische Umleitung auf www einrichten
Wird unsere Webseite ohne einem www aufgerufen, so fügen wir im PHP automatisch das www vorne ein und leiten den Besucher und auch Suchmaschinen direkt an die Adresse mit www weiter. Sollte eine Unterseite (z.B. news.php) angefragt worden sein, wird diese auch in der Umleitung berücksichtigt. Unter dem Beispiel befindet sich noch eine detaillierte Zeile-für-Zeile Erklärung.
<?php
if ($_SERVER["HTTP_HOST"] == "foobarblog.net") {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.foobarblog.net".$_SERVER["REQUEST_URI"]);
exit;
}
Beispiel 1: Zeile für Zeile im Detail erklärt
- Zeile 2, if-Anweisung: Hier wird überprüft, ob die Domain ohne www eingegeben wurde.
- Zeile 3, erster Header: Mit der PHP Funktion header() ein "301 Moved Permanently" Header erzeugt. Dieser teilt den Suchmaschinen mit, dass diese Seite dauerhaft umgezogen ist und sie ihren internen Index aktualisieren sollen. Bei der nächsten Anfrage werden es die Suchmaschinen direkt auf der www-Adresse versuchen.
- Zeile 4, zweiter Header: Der "Location" Header bewirkt die Umleitung selbst. Hier habe ich die Domain inklusive dem www stehen, auf die umgeleitet werden soll. Das $_SERVER["REQUEST_URI"] wird hinten drangehängt was bewirkt, dass eine eventuelle Unterseite (z.B. news.php) des Aufrufs übernommen wird.
- Zeile 5, exit: Dies bewirkt, dass die Umleitung direkt ausgeführt und nachstehender Code ignoriert wird.
Beispiel 2: Eine Unterseite umleiten
Wenn die Unterseite aktuelles.php aufgerufen wird möchten wir diese umleiten auf news.php. Unter dem Beispiel natürlich wieder eine detailliertere Erklärung zum PHP-Code.
<?php
if (substr($_SERVER["REQUEST_URI"], 0, 14) == "/aktuelles.php") {
header("HTTP/1.1 301 Moved Permanently");
header("Location: /news.php".substr($_SERVER["REQUEST_URI"], 14));
exit;
}
- Zeile 2, if-Anweisung: Mit der substr() Funktion werden die ersten 14 Zeichen der angefragten Adresse extrahiert. Wenn diese gleich "aktuelles.php" sind, machen wir den Redirect.
- Zeile 3, erster Header: Suchmaschinen mitteilen, dass die Seite permanent umgezogen ist. Genauere Beschreibung in Zeile 3 des vorigen Beispiels.
- Zeile 4, zweiter Header: Über den "Location" Header wird auf die news.php umgeleitet. Danach wird die ursprünglich angefragte Adresse angehängt, allerdings ohne der ersten 14 Zeichen, also ohne "aktuelles.php".
- Zeile 5, exit: Dies bewirkt, dass die Umleitung direkt ausgeführt und nachstehender Code ignoriert wird.
Wenn ihr eine spezielle Umleitung benötigt, könnt ihr natürlich gerne in den Kommentaren fragen. Ich helfe euch gerne bei eurem Vorhaben weiter!
Markus