Webentwicklung mal ganz einfach!
← Zurück zur Übersicht

PHP: Eine Seite korrekt auf eine Neue umleiten - "301 Moved Permanently"

Publiziert am von Markus Hauser

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

← Zurück zur Übersicht
Eingeordnet in: HTML / CSS PHP / MySQL
Lesezeichen: Permalink zum Beitrag

Kommentare (7)

Lars

super
danke

Markus

Kann sinn machen,
theoretisch musst dann aber auch alles mit einem “w” und ohne Subdomain auf auf die www. Domain weiterleiten.

In deinem Fall nimmst du oben stehendes Beispiel 1 und überprüfst in der “if” Abfrage z.B. auf “ww.domain.at”, also dass es folgendermaßen aussieht:

if ($_SERVER["HTTP_HOST"] == "ww.foobarblog.net") {

Du musst allerdings weiters noch sicher stellen, dass die ww. Subdomain auch auf deinem Server eingerichtet ist.

Lars

Hi,
nochmal zum Besispiel1: wie würde ich das am besten einbauen, wenn ich “ww.domain” bzw. die subdomain “ww” auch auf die startseite umleiten will? Falls jemand statt “www”, nur “ww” eingibt, wäre das sinnvoll um zu verhindern, dass eine “Oops!”-Seite erscheint oder?

Markus

Umso besser.
Freut mich wenn’s jemand gebrauchen kann was ich hier schreibe :-)

lars

danke,
sowas hab ich gesucht!

Markus

Das hör ich
natürlich äußerst gerne!

Sonja

danke
für die tolle zusammenfassung. super verständlich!

← Zurück zur Übersicht