Server- und clientseitige Redirects: Mit PHP und per htaccess
Serverseitige-Weiterleitungen mit PHP, per htaccess und mod-rewrite
Übersicht / Seite - Weiterleitungen:
- per Meta-Tag (allgemeine Infos zur Benutzung)
- per JavaScript (clientseitige Redirects mit JavaScript)
- auf mobile Seiten (eine einfache Umleitung auf mobile Seiten)
- mit Bestätigung (Pseudo-Weiterleitung auf mobile Seite mit Bestätigung)
- mit PHP (serverseitige Redirects mit PHP)
- per htaccess (mit mod_alias und mod_rewrite)
- mit mod_rewrite (weitere Beispiele von Weiterleitungen per htaccess)
- URL-Rewriting (Umschreibung von URLs mit oder ohne QueryStrings)
- Weiterleitung statt 404 (... bei fehlerhaften Aufrufen oder von alten URLs)
Weiterleitungen mit PHP
Weiterleitungen sind mit PHP und der Funktion
header() eigentlich recht einfach zu realisieren. Wichtig ist nur, dass vor der Weiterleitung weder
Leerzeichen noch irgendwelche HTML-Tags ausgegeben werden. Bei Verwendung von Charset UTF-8 ist darauf
zu achten, dass die Dateien ohne BOM (Byte Order Mark) gespeichert werden. Wird eine Datei mit BOM
gespeichert, so wird zu Beginn der Datenübertragung eine Kennung zur Definition der
Byte-Reihenfolge vom Server gesendet, mit der einige Browser nichts anzufangen wissen
und diese dann als Leerzeile oder mit einigen wenigen unerwünschten Sonderzeichen ausgeben. Eine
PHP-Weiterleitung sollte mit exit beendet werden, um sicherzustellen, dass nachfolgender Code nicht mehr
ausgeführt wird.
Weiterleitung mit PHP, erstes Beispiel:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/neue-seite.php");
exit;
?>
Um eine "saubere" 301 Weiterleitung zu realisieren, sollte in der ersten
Zeile der gewünschte HTTP-Statuscode mitgeteilt werden. Wie den beiden Beispielen zu entnehmen ist, gibt
es zwei unterschiedliche Schreibweisen. In welchen Fällen die erste oder die zweite Variante zu
verwenden ist, können Sie der Dokumentation unter
php.net/manual/
entnehmen oder Sie probieren es einfach aus.
Weiterleitung mit PHP, zweites Beispiel:
<?php
header("Status: 301 Moved Permanently");
header("Location: http://www.example.com/andere-seite.php");
exit;
?>
Weiterleitung per htaccess und mod_alias
Für serverseitige Weiterleitungen bietet sich vielfach die Möglichkeit
an, diese als Direktiven in einer htaccess Konfigurationsdatei zu definieren. Für einfach gestrickte Um-
und Weiterleitungen reicht dabei eine Zugriffsmöglichkeit auf mod_alias aus, mod_rewrite ist in diesem
Fall nicht erforderlich.
Im ersten Beispiel werden alle aufgerufenen URLs, gleich ob diese auf Seiten oder Unterseiten verweisen
von Domain A verweisen, zu Domain B (im Beispiel www.example.com) weitergeleitet.
Redirect per htaccess, erstes Beispiel:
RedirectPermanent / http://www.example.com/
Im zweiten Beispiel wird nur die aufgerufenen alte-seite.php bzw. deren Pfad
zu der neue Adresse weitergeleitet. Ob als Schreibweise RedirectPermanent oder Redirect 301 verwendet wird,
sollte bislang nicht relevant sein, da der Apache oder mod_alias die Syntax von beiden Schreibweisen als
HTTP-Statuscode 301 interpretiert (Irrtum und Änderungen vorbehalten).
Redirect per htaccess, zweites Beispiel:
Redirect 301 /alte-seite.php http://www.example.com/neue-seite.html
Mit RedirectMatch lassen sich auch Weiterleitungen unter Verwendung von
regulären Ausdrücken realisieren. Im folgenden Beispiel sollen nur Aufrufe von PHP-Dateien auf namensgleiche
Dateien mit der Extension html weitergeleitet werden.
Beispiel: /diese-datei.php
wird weitergeleitet auf http://www.example.net/diese-datei.html
RedirectMatch per htaccess:
RedirectMatch 301 ^/([a-zA-Z0-9_-]+)\.php$ http://www.example.net/$1.html
Weiterleitung per htaccess und mod_rewrite
Das Apache Modul mod_rewrite ermöglicht dem Webmaster sehr viele Möglichkeiten,
auf die Konfiguration eines Servers per htaccess Einfluss zu nehmen. Zu den Stärken der RewriteEngine gehört
die Verarbeitung von regulären Ausdrücken, ebenso wie die Verarbeitung von durch den Webmaster definierten
Bedingungen (Konditionen) und Anweisungen.
Im ersten Beispiel wurde als Bedingung definiert, dass alle aufgerufenen URLs, deren Host-Komponente mit
example beginnt und mit net endet (^ Beginn eines Musters und $ Ende des Musters) nach www.example.net
weitergeleitet werden.
Definieren einer Standard-Domain, erstes Beispiel:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.net$ [NC]
RewriteRule ^(.*)$ http://www.example.net/$1 [L,R=301]
Im zweiten Beispiel wurde example.net ohne vorangestelltes www. als Standard-Domain
definiert.
Definieren einer Standard-Domain, zweites Beispiel:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.net$ [NC]
RewriteRule ^(.*)$ http://example.net/$1 [L,R=301]
Um die vielfältigen Möglichkeiten der RewriteEngine voll ausschöpfen zu können,
ist es zwingend erforderlich, die Syntax von regulären Ausdrücken zu verstehen.
Browser-Weiterleitungen
| Auf mobile Seiten «
/ » Weitere Beispiele
|