Serverside Redirect mit .htaccess
Die Weiterleitung bestimmter Verzeichnisse oder einzelner Dateien kann auch mit der Redirect Direktive des Apache Webservers umgesetzt werden. Dies ist unserer Meinung nach die effektivste Methode und erfolgt in der Konfigurationsdatei .htaccess des Apache Webservers.
Eine .htaccess Datei ist eine simple Text-Datei, die mit einem Text-Editor wie dem Notepad erstellt und per FTP in das Verzeichnis übertragen wird, in dem Redirects ausgeführt werden sollen. Sie gilt als Systemdatei, besitzt keinen Dateinamen und trägt tatsächlich die Dateiendung “.htaccess”.
Dies setzt allerdings grundsätzlich voraus, daß Ihre Webseiten auf einem Linux Apache Webserver gehosted sind, und daß Sie über die entsprechenden Ausfürungsrechte für .htaccess - Dateien auf Ihrem Webserver verfügen.
Im Klartext: Es muß Ihnen vom Webmaster oder Provider die Verwendung von .htaccess über die Konfigurationsdatei Ihres Webservers explizit erlaubt sein. Fragen Sie bei Ihrem Provider nach.
Die Chancen stehen für Sie schlecht, wenn Sie eines der unzähligen Billig-Angebote nutzen oder bei einem Webhoster sind, der sich selber nicht mit .htaccess auskennt. Häufig sind htaccess-Redirects daher auch bei vielen Webservern, die es eigentlich könnten, leider nicht möglich. Sehen Sie sich gegebenfalls nach einem anderen Webhosting-Partner um.
Wie bringen Sie .htaccess zum Laufen?
Wenn Sie selbst einen Rootserver oder ähnliches betreiben und sich mit VI, Putty und Co. auskennen, können Sie an den in der folgenden Beispiel-Konfiguration gezeigten Einstellungen sehen, wie Sie .htaccess serverweit in Ihrer Konfigurationsdatei “httpd.conf”? erlauben.
Konfiguration für .htaccess in der httpd.conf:
# Startverzeichnis der Dokumentenstruktur der Domain
DocumentRoot "/srv/www/htdocs"
AccessFileName .htaccess
Mit der Anweisung “AccessFileName”? kann dem Apache-Webserver eine Namensliste von dezentralen Konfigurationsdateien definiert werden. Im Standard besitzt AccessFileName die Voreinstellung .htaccess. Während der Bearbeitung einer Anfrage sucht der Webserver in jedem Verzeichnis unterhalb des DocumentRoot? - Verzeichnisses der Domain nach einer dezentralen Konfigurationsdatei.
Findet der Server eine .htaccess-Datei, wird mit Hilfe der Anweisung AllowOverride festgelegt, welche Anweisungen der zentralen Konfigurationsdatei überschrieben werden dürfen. Die Definition einer AllowOverride-Anweisung darf nur innerhalb eines Directory-Blocks erfolgen. Sehr detailierte Informationen zu AllowOverride? finden Sie unter hier. An dieser Stelle verraten wir nur kurz soviel: AllowOverride kennt die Argumente “All, None, AuthConfig, FileInfo, Limit, Indexes, Options”. Der Standardwert ist “All”.
VHosts-Konfiguration
Damit ein Apache überhaupt weiß, was er bei Redirects mit .htaccess tun soll, müssen Sie im Verzeichnis “vhosts.d” die Konfigurationsdatei des virtuellen Hosts ablegen. Nachfolgend ein Beispiel einer VHosts-Konfiguration mit der Definition eines Verzeichnisblocks in der Domainstruktur, in der .htaccess generell, also verzeichnisübergreifend aktiv ist.
<VirtualHost 10.10.10.1>
ServerName www.server.de
# ...
<directory "/srv/www/htdocs">
AllowOverride FileInfo Limit
</directory>
# …
</VirtualHost>
Wenn .htaccess nicht funktioniert, liegt es häufig daran, daß AllowOverride auf “None” gesetzt ist und etwa so aussieht:
<VirtualHost 10.10.10.1>
ServerName www.server.de
# ...
<directory "/srv/www/htdocs">
AllowOverride None
</directory>
# …
</VirtualHost>
Beide Beispiele verwenden einen Musterpfad (“directory”) zum RootDirectory, wie er wohl sehr häufig vorkommt. Sie müssen den Pfad gegebenenfalls auf Ihre Server-Struktur hin ändern.
VHosts-Konfiguration für .htaccess in der httpd.conf
Wenn Sie nur wenige Domains auf Ihrem Apache verwalten, können Sie unter normalen Voraussetzungen das Ganze abzukürzen, indem Sie die VHosts-Konfiguration auch gleich in der httpd.conf, also in der zentralen Konfigurationsdatei unterbringen.
# Konfigurationsdaten der Default-Domain
ServerName www.server.de
DocumentRoot "/srv/www/htdocs"
AccessFileName .htaccess
# …
<VirtualHost 10.10.10.1>
DocumentRoot "/srv/www/mein-server"
ServerName www.mein-server.de
ServerAlias mein-server.de
# …
<directory "/srv/www/mein-server">
AllowOverride FileInfo Limit
</directory>
</VirtualHost>
# …
<VirtualHost 10.10.10.2>
DocumentRoot "/srv/www/dein-server"
ServerName www.dein-server.de
ServerAlias dein-server.de
# …
<directory "/srv/www/dein-server">
AllowOverride None
</directory>
</VirtualHost>
Zunächst wird der Name der Datei hinterlegt, die für Redirects auf allen Domains des Servers mit .htaccess gültig ist: “.htaccess”.
Dann wird die Nutzung von .htaccess-Dateien für die Domains “www.mein-server.de” und “mein-server.de” erlaubt. Um den Einsatz von .htaccess auch für die Domain “mein-server.de” zu ermöglichen, wirdzusätzlich ein ServerAlias im VirtualHost-Block definiert.
Die Domains “www.dein-server.de” und “dein-server.de” haben keine Berechtigung, .htaccess-Redirects auszuführen.
Syntax .htaccess Redirect / .htaccess Weiterleitung
Bevor wir uns gleich den Beispielen für Redirect Direktiven mit .htaccess auf dem Apache zuwenden, wollen wir Ihnen hier noch einige grundsätzliche und hoffentlich hilfreiche Hinweise nicht vorenthalten.
Statuscodes und ihre Bedeutung
permanent | entspricht dem Statuscode 301 |
temp | entspricht dem Statuscode 302; Standardeinstellung wenn kein Statuscode oder Argument übergeben wurde. |
See other | entspricht dem Statuscode 303 |
gone | entspricht dem Statuscode 410 |
Benutzerrechte
Sie brauchen natürlich Benutzerrechte für ein .htaccess-File. Theoretisch würden ausschliesslich Leserechte reichen, in der Praxis geht man aber von “rw rw r” aus, damit Applikationen wie ein CMS oder Webshop darauf schreiben können.
Syntax-Schema .htaccess
Die Syntax der Redirect - Direktive baut sich folgendermaßen auf:
Redirect [status] URL-Pfad Ziel-URL
Wird kein Statuscode angegeben, interpretiert der Apache Webserver eine temporäre Weiterleitung (Statuscode 302). Die Statuscodes können als Zahl oder als Argument übergeben werden.
Die alte Adresse muß als absoluter Pfad angegeben werden, relative Pfade sind nicht erlaubt. Achten Sie auch auf die Groß- und Kleinschreibung bei der Pfadangabe, da der Pfad eines URL case-sensitive ist.
Beispiel 1:
Dies wäre der einfachste Fall, um von einem Verzeichnis mit dem Statuscode 302 weiterzuleiten:
Redirect /testverzeichnis http://www.anderer-server.de
Folgendes Beispiel-Listing hat den gleichen Effekt:
Redirect 302 /testverzeichnis http://www.anderer-server.de
Ruft ein Benutzer hier das Verzeichnis “testverzeichnis” auf, wird er sofort auf “www.anderer-server.de” weitergeleitet.
Beispiel 2:
Jetzt ein permanenter Redirect (Statuscode 301) vom gleichen Verzeichnis auf “www.anderer-server.de”:
Redirect 301 /testverzeichnis http://www.anderer-server.de
Und damit wäre im Prinzip eigentlich schon fast alles über Weiterleitungen mit .htaccess gesagt. Für einfache Anforderungen sollten ein paar Einträge in einer .htaccess-Datei ausreichen.
Weiterleitung mit dem “mod_rewrite - Module”
Es liegt allerdings auf der Hand, daß Websites mit mehreren hundert oder tausend URLs Anforderungen an den Umgang mit Redirects stellen, die ziemlich lange Eintragslisten in einer .htaccess erfordern. Dieses Problem läßt sich am Besten unter Verwendung eines weiteren Apache-Modules regeln, dem » mod_rewrite - Module …
5. Februar 2008 - 15:58 | Webprogrammierung » Redirect & Suchmaschinen | ∞ | Codecasters