Zum Inhalt springen

mod_alias

Aus Foxwiki
Die 5 zuletzt angesehenen Seiten:  Spezial:Ungültiger Seitenname » mod_alias
(Weitergeleitet von Apache2.4/08/1/1 mod alias)

mod_alias - Direktiven für namensgebende Aliase und Weiterleitung

Beschreibung

Alias Verzeichnis im Dateisystem einer URL zuordnen

Dieses Modul enthält eine Reihe von Direktiven für die namensgebenden Aliase, aber auch für die Weiterleitung:

Alias und AliasMatch dienen der URL-Änderung hinter den Kulissen, während die diversen Redirect*-Direktiven für Weiterleitungen zuständig sind.

mod_alias

Kontext Server, <VirtualHost>
Syntax Alias URL-Pfad Dateipfad|Verzeichnispfad Standardwert nicht gesetzt

Die Direktive Alias ordnet eine Datei oder ein Verzeichnis, das außerhalb der DocumentRoot liegt, einer URL zu. Das erste Argument ist die gewünschte URL (genauer gesagt der URL-Pfad), das zweite ist der Pfad der Datei oder des Verzeichnisses im lokalen Dateisystem. Beispiel:

Alias /extern /usr/local/mydocs

Fordert ein User nach der Definition dieses Aliases die URL photo.jpg an, dann wird die Datei /usr/local/mydocs/ photo.jpg geliefert.

Wenn der URL-Pfad mit einem Slash endet, muss dies auch für den Verzeichnispfad gelten. Beispiel:

Alias /images/ /usr/local/mydocs/images/

In diesem Fall wird allerdings eine Anfrage nach www.mynet.de/images (ohne abschließenden Slash) nicht, wie sonst üblich, durch eine automatische Weiterleitung auf die echte Verzeichnis-URL www.mynet.de/images/ beantwortet, sondern mit 404 Not Found.

Wenn Sie die in Kapitel Grundkonfiguration, beschriebene restriktive Voreinstellung für das Wurzelverzeichnis vorgenommen haben, müssen Sie das Ziel des Aliases explizit freischalten – die Einstellungen für die DocumentRoot gelten in diesem Fall nicht. Hier ein Beispiel:

Alias /test/ /usr/local/mydocs/test/
<Directory /usr/local/mydocs/test>
Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all
</Directory>

AliasMatch RegExp-Verzeichnismuster einem URL-Muster zuordnen

Modul mod_alias

Kontext Server, <VirtualHost>
Syntax AliasMatch RegExp Dateipfad|Verzeichnispfad Standardwert nicht gesetzt

AliasMatch

funktioniert im Prinzip genau wie Alias. Der Unterschied besteht darin, dass als URL-Pfad ein regulärer Ausdruck verwendet wird. Geklammerte Teilausdrücke können im Datei- oder Verzeichnispfad durch $1 bis $9 wiedergegeben werden. Das folgende Beispiel bildet das Verzeichnis /usr/local/ mydocs/ images/ auf die URI /images ab:

AliasMatch ^/images/(.*) /usr/local/mydocs/images/$1

Dieses Beispiel nutzt die Fähigkeiten von AliasMatch aus und ordnet die Verzeichnisse /usr/local/mydocs/text0 bis /usr/local/mydocs/text9 den URIs / text0 bis /text9 zu:

AliasMatch ^/text([0-9])/(.*) /usr/local/mydocs/text$1/$2

Die Optionen der mittels AliasMatch eingebundenen Verzeichnisse lassen sich mithilfe von <DirectoryMatch>- oder <LocationMatch>-Containern festlegen.

Hinweis

Beachten Sie bitte, dass zwei weitere Alias-Direktiven nicht hier, sondern in Kapitel 14, »CGI«, behandelt werden: ScriptAlias und ScriptAliasMatch. Sie funktionieren im Prinzip genau wie die Konfigurationsanweisungen Alias beziehungsweise AliasMatch, mit dem Unterschied, dass zusätzlich alle Dateien in den eingebundenen Verzeichnissen als CGI-Skripte betrachtet werden.

Redirect

Sendet dem Client eine Umleitungsmitteilung

Modul mod_alias

Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (FileInfo) Syntax Redirect [Status] URL-Pfad URL Standardwert nicht gesetzt

Redirect

ändert die angeforderte URL nicht serverseitig, sondern sendet dem Client eine Mitteilung über den geänderten Aufenthaltsort der angeforderten Ressource. Pflichtangaben sind der URL-Pfad, der in der Anfrage gefunden werden soll, und die URL, zu der die Umleitung erfolgen soll. Diese URL muss absolut sein, das heißt, sie muss mit http:// und einem Hostnamen beginnen. Sie können daher nicht nur Weiterleitungen innerhalb Ihrer eigenen Site, sondern auch auf andere Websites durchführen.

Das folgende Beispiel leitet Anfragen für Dateien und Unterverzeichnisse unter /test an die URL http://www.mynet.de/woanders weiter:

Redirect /test http://www.mynet.de/woanders

Das bedeutet, dass alles, was in der angeforderten URL hinter /test stand, an http://www.mynet.de/woanders angehängt wird. Eine Anforderung des Bildes /test/logo.gif würde mit folgender Weiterleitung auf http://www. mynet.de/woanders/logo.gif beantwortet:

 HTTP/1.1 302 Found Date: Tue, 26 Aug 2008 11:31:03 GMT Server: Apache/2.2.9 (Unix)
 Location: http://www.mynet.de/woanders/logo.gif Content-Length: 221
 Content-Type: text/html; charset=iso-8859-1
 
 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
 <html><head>
 <title>302 Found</title>
 </head><body>
 <h1>Found</h1>
 <p>The document has moved <a href="http://www.mynet.de/woanders/
 logo.gif">here</a>.</p>
 </body></html>

Der wichtigste Teil der Antwort ist der Location-Header, der dem Client den geänderten Aufenthaltsort der angeforderten Ressource mitteilt. Für Clients, die nicht in der Lage sind, Weiterleitungen automatisch zu folgen, enthält der Body zusätzlich einen entsprechenden Hyperlink.

Ein optionales Argument für Redirect ist der HTTP-Statuscode, mit dem die Weiterleitungsmitteilung an den Client versendet wird. Für die folgenden vier Statuscodes existiert eine spezielle Bezeichnung:

  • permanent

Die Mitteilung wird als dauerhafte Weiterleitung mit dem Statuscode 301 Moved Permanently versendet. Das folgende Beispiel leitet Anfragen für /old dauerhaft nach http://www.newaddress.org/new um:

Redirect permanent /old http://www.newaddress.org/new

Dies ist z. B. nützlich, wenn sich Ihr Haupt-Domain-Name aus irgendeinem Grund geändert haben sollte. Angenommen, Sie haben Ihr Studium beendet und ziehen mit Ihrer Website von www.uni-abc.de/~meinname auf die neu reservierte Domain www.meinname.de um. In einer .htaccess-Datei in Ihrem Webverzeichnis könnten Sie die folgende Umleitung unterbringen:

Redirect permanent /~meinname http://www.meinname.de

Wie Sie sehen, muss der umzuleitende URL-Pfad auch dann mit einem / beginnen und den Beginn der URL bis zum aktuellen Verzeichnis wiedergeben, wenn die Direktive in einer .htaccess-Datei oder in einem Container-Kontext steht.

  • temp Wie Sie am ersten Beispiel weiter oben sehen konnten, ist dies der Standardwert; Sie können ihn auch weglassen. Er erzeugt eine vorübergehende Weiterleitung – aus Kompatibilitätsgründen mit dem älteren Statuscode 302 Found, nicht mit 307 Temporary Redirect.
  • seeother Die Meldung erhält den Statuscode 303 See Other.
  • gone Dies erzeugt den Status 410 Gone, der anzeigt, dass die angeforderte Ressource nicht mehr existiert. Für diesen Statuscode ergibt eine URL keinen Sinn; deshalb darf sie auch nicht angegeben werden.

Andere Statuscodes als diese vier können Sie numerisch angeben. Beachten Sie, dass alle 3xx-Codes eine Umleitungs-URL für den Location-Header benötigen. Alle anderen Fehlercodes erhalten dagegen keine URL. Das folgende Beispiel sendet für alle URIs unter /nichtda mutwillig ein 404 Not Found:

Redirect 404 /nichtda
Vorsicht Falle!

Bei Redirect können Sie in die hier beschriebene Falle tappen:

Eine Weiterleitung in ein Unterverzeichnis des aktuellen Verzeichnisses funktioniert nicht ohne Weiteres. Schauen Sie sich die folgende Redirect-Anweisung an, die zunächst völlig harmlos aussieht:

Redirect /info http://www.mynet.de/info/neu

Nehmen Sie zur Verdeutlichung an, der Server erhält eine Anfrage mit der URL www.mynet.de/info/muster.gif. Laut Redirect-Direktive sollen alle URIs, die mit /info beginnen, auf http://www.mynet.de/info/neu weitergeleitet werden. Die Weiterleitung erzeugt also eine neue Anfrage mit folgender Adresse: muster.gif. Da der Redirect-Befehl jedoch auch auf diese Anfrage zutrifft, wird erneut eine Weiterleitungsmitteilung gesendet – diesmal mit der URL muster.gif! Das geht so lange weiter, bis der Client oder der Server aufgibt oder bis die maximale URL-Länge erreicht ist. Wenn Sie diese Art der Weiterleitung tatsächlich benötigen, funktioniert sie entweder über einen Alias – der eben keine neue Anfrage erzeugt – oder aber mithilfe der komplexen Regeln von mod_rewrite.

RedirectMatch

Sendet dem Client eine Umleitungsmitteilung, wenn die URL einem RegExp entspricht

Modul mod_alias

Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (FileInfo) Syntax RedirectMatch [Status] RegExp URL Standardwert nicht gesetzt

RedirectMatch funktioniert genau wie Redirect. Allerdings können Sie als URLPfad einen regulären Ausdruck verwenden. Das folgende Beispiel leitet Anfragen nach URIs unter den Verzeichnissen /images00 bis /images99 permanent an die Verzeichnisse /00 bis /99 auf dem Host bilder.mynet.de weiter:

RedirectMatch permanent ^/images([0-9]{2})/(.*) \
http://bilder.mynet.de/$1/$2

Die Anfrage nach www.mynet.de/images5/photo7.jpg wird also beispielsweise mit einer Weiterleitung auf bilder.mynet.de/5/photo7.jpg beantwortet.

Anders als bei einem einfachen Redirect kann das Weiterleitungsziel von RedirectMatch auch etwas anderes sein als ein geändertes Präfix mit demselben Pfad. Das liegt daran, dass dieser Pfad bei RedirectMatch nicht automatisch angehängt wird. Deshalb könnten Sie beispielsweise alle Anfragen, die mit einem bestimmten URL-Pfad beginnen, auf eine einzige Datei umleiten. Beispiel:

RedirectMatch temp ^/news http://www.mynet.de/newsinfo.html

Diese Zeile könnten Sie z. B. einsetzen, falls sich der gesamte Inhalt des Unterverzeichnisses /news gerade in einer Überarbeitung befinden sollte. Für jede Anfrage, deren URI mit /news beginnt, würde daraufhin die Datei /newsinfo.html angezeigt.

Hier noch ein Beispiel, das auf den ersten Blick etwas seltsam erscheint:

RedirectMatch ^/search/(.*) http://www.google.de/search?q=$1

Wie Sie sehen, werden sämtliche Anfragen, deren URL-Pfad mit /search/ beginnt, an die Suchmaschine Google weitergeleitet, genauer gesagt als Wert des QueryFeldes q für die URI /search – dies ist der Suchbegriff. Mit anderen Worten: Google sucht nach dem Begriff, den Sie an www.mynet.de/search/ angehängt haben. Das Prinzip ist also nicht weiter kompliziert.

Die weitaus interessantere Frage ist, wozu man so etwas überhaupt benötigt. Es könnte Sie beispielsweise ärgern, dass es keine Spuren in Ihren Log-Dateien (siehe auch Logging) hinterlässt, wenn ein User einen externen Hyperlink anklickt. Besonders bedauerlich ist das, wenn Sie so etwas wie einen Amazon-Partner-Shop betreiben – Sie wissen nie, ob sich jemand für Ihre Angebote interessiert. Dies können Sie auf eine ähnliche Weise ändern. Zunächst einmal benötigen Sie eine RedirectMatch-Direktive wie diese:

RedirectMatch ^/elsewhere/(.*) http://$1

Anschließend müssen Sie die URLs der externen Hyperlinks in Ihren HTMLDokumenten, für die Sie Log-Einträge benötigen, nach folgendem Schema ändern: Aus http://andere-site.com/pfad/usw wird /elsewhere/anderesite.com/pfad/usw.

Ein Amazon.de-Partner-Link auf das vorliegende Buch hat beispielsweise folgende Original-URL:

http://www.amazon.de/dp/3836213257/my-partner-id

Wenn die genannte Direktive in Kraft ist, müssen Sie sie in HTML-Dateien durch folgende Link-URL ersetzen:

/elsewhere/www.amazon.de/dp/3836213257/my-partner-id

Sobald jemand den entsprechenden Link anklickt, enthält Ihre AccessLog-Datei einen Eintrag wie diesen:

217.63.82.109 – - [29/Aug/2008:13:11:07 +0100] "GET /elsewhere/ www.amazon.de/dp/3836213257/my-partner-id HTTP/1.1" 302 249 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; .NET CLR1.0.3705)"

In Logging werden einige nützliche Perl-Skripte und Hilfsprogramme vorgestellt, mit denen sich Log-Dateien nach solchen Informationen filtern lassen. Beachten Sie die 302 in der Log-Zeile – sie weist darauf hin, dass der Browser des Besuchers keine lokale Datei erhalten hat, sondern eine Weiterleitungsmitteilung (302 Found).

RedirectPermanent

Sendet dem Client eine Mitteilung über eine permanente Umleitung

Modul mod_alias

Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (FileInfo) Syntax RedirectPermanent URL-Pfad URL Standardwert nicht gesetzt

Dies ist lediglich eine spezielle Schreibweise für Redirect permanent, die aus Kompatibilitätsgründen beibehalten wurde.

RedirectTemp

Sendet dem Client eine Mitteilung über eine vorübergehende Umleitung

Modul mod_alias

Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (FileInfo) Syntax RedirectTemp URL-Pfad URL Standardwert nicht gesetzt

Diese Direktive ist nichts weiter als eine veraltete Alternative zu Redirect temp.


Anhang

Siehe auch

Links

Weblinks