RedirectMatch aufgebohrt

Mit dem Befehl RedirectMatch lassen sich feine Dinge anstellen. Die "einfachen" Lösungen funktionieren meist im ganzen Webaccount. Das ist manchmal nur bedingt gewünscht.

In einem früheren Beitrag [1] habe ich das Kommando 'RedirectMatch' des Apache-Webserver bereits vorgestellt. Dabei ging es um das Leerräumen von Verzeichnissen und das Umlenken zu einer neuen Dateiendung. Dieser Artikel hakt nochmal nach.

Kurztheorie

Wir brauchen einen Webaccount, den Apache-Webserver und die Datei .htaccess. Der Syntax des Kommandos sieht so aus:

RedirectMatch [status] regex url

Zuerst das Kommando. Dann wird der Status des Umlenkens (permanent, temp, usw.) notiert. Diese Angabe ist nicht zwingend notwendig. Es folgt ein regulärer Ausdruck und schließlich eine Url-Angabe zum Umlenken. O.g. Artikel behandelt das Ganze ausführlich. Darum wird das Kapitel Theorie hier beendet.

Beispiel 1

Im Hauptverzeichnis der Domain wurde die Dateiendung von '.html' auf '.php' umgestellt. Unterverzeichnisse sind nicht betroffen bzw. ein Umlenken dort, würde Fehler verursachen. Folgender .htaccess-Eintrag lenkt ausschließlich im Hauptverzeichnis um:

RedirectMatch  ^/([a-zA-Z0-9_-]*).html$   http://domain.de/$1.php

Alle angeforderten Dateien im Hauptverzeichnis vom Typ html werden automatisch zur gleichnamigen Datei mit der Endung php umgelenkt. Berücksichtigt werden Dateinamen mit Groß- und Kleinbuchstaben, Zahlen, Unterstrich und Minus:

http://domain.de/strike.html ==> http://domain.de/strike.php
http://domain.de/archiv/strike.html ==> bleibt so

Beispiel 2

Von der Änderung der Dateiendung ist nur ein Unterverzeichnis betroffen. Folgende Notation im .htaccess-File realisiert das Umlenken vor Ort:

RedirectMatch  ^/html/([a-zA-Z0-9_-]*).htm$   http://domain.de/html/$1.shtml

Im Unterverzeichnis 'html' werden Dateien mit der Endung htm zur Dateiendung shtml umgelenkt:

http://domain.de/html/aha.htm ==> http://domain.de/html/aha.shtml
http://domain.de/aha.htm ==> bleibt so

Diese Festlegung gilt nur für das entsprechende Unterverzeichnis und die in Beispiel 1 beschriebenen Konventionen für den Dateinamen. Für exotische Dateinamen müsste der reguläre Ausdruck aufgebohrt werden. Das ist dieser hier: ([a-zA-Z0-9_-]*)

Beispiel 3

Das Ganze kann man noch defiziler gestalten. Neben einer neuen Dateiendung kommt eine Veränderung in der Verzeichnisstruktur dazu. Wir notieren im .htaccess-File:

RedirectMatch  /(.+)/([abc]).html  http://domain.de/subdir/$1/new/$2.php

Der reguläre Ausdruck besteht aus 2 Teilen. Die erste Klammerung (.+) entspricht in der neuen URL $1, die zweite Klammerung ([abc]) entspricht $2. Die regulären Ausdrücke werden also von links fortlaufend durchnummeriert. Der 1. reguläre Ausdruck entspricht jedem beliebigem Unterverzeichnis. Die gesuchte HTML-Seite respektive der 2.Ausdruck beschränkt sich auf die Dateien a.html, b.html und c.html. Und das passiert:

http://domain.de/sub/a.html ==> http://domain.de/subdir/sub/new/a.php
http://domain.de/sub/div/b.html ==> http://domain.de/subdir/sub/div/new/b.php
http://domain.de/sub/1c.html ==> bleibt so

Entscheidend ist es, den regulären Ausdruck exakt zur Problemstellung zu formulieren. Dann sind die meisten Umlenk-Probleme lösbar. Eine Erläuterung in deutscher Sprache zur Thematik "reguläre Ausdrücke" gibt es im Selfhtml [2]. Meine CGI-Linksammlung [3] enthält einen Link zu einem ausführlichen, englischen RX-Tutorial (rx = Regular eXpression).

Und was soll das bitte?

Gute Frage! Ab und zu bekomme ich E-Mails, in denen interessante Problemstellungen geschildert werden und in denen ich dann um Rat gebeten werde. Dieser Artikel basiert auf einer solchen E-Mail. Und das soll und war es. :-)

Quellen und Links

[1] Effizienter Redirect (schmager.de)
[2] Perl / Reguläre Ausdrücke (selfhtml.org)
[3] CGI-Linksammlung / Perl-Tutorials (schmager.de)

Erstveröffentlichung: 05.12.2002



URL: http://www.schmager.de/rematch2.shtml aktualisiert: 01.01.2017
© 1998 - 2017 Jan Schmager
0.0050 s