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 zur Thematik "reguläre Ausdrücke" findet ihr im Selfhtml [2]. In englischer Sprache gibt es ein sehr ausführliches und empfehlenswertes Tutorial bei delorie.com [3].
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] www.delorie.com/gnu/docs/regex/regex_toc.html (offline)
Erstveröffentlichung: 05.12.2002