Wildcards in .htaccess
Jan
- webserver
0 Sönke Tesch0 Jan0 Sönke Tesch0 Sönke Tesch0 Jan
Guten Tag,
ich muss eine ganze Anzahl an Dateien, die alle die gleiche Namensstruktur haben, in neue Unterverzeichnisse packen. Die Datei "/abc0101.htm" soll dann "/abc/abc0101.htm" heißen, aus "/abc0102.htm" soll "abc/abc0102.htm" werden usw. Muss ich die entsprechenden Redirect-Anweisungen in der .htaccess-Datei für jedes einzelne Dokument eintragen oder komme ich irgendwie mit Wildcards weiter? Bei google und hier im Forumsarchiv habe ich auf den ersten Blick nichts gefunden.
Vielen Dank, allseits frohes Schaffen,
Jan
ich muss eine ganze Anzahl an Dateien, die alle die gleiche Namensstruktur haben, in neue Unterverzeichnisse packen. Die Datei "/abc0101.htm" soll dann "/abc/abc0101.htm" heißen, aus "/abc0102.htm" soll "abc/abc0102.htm" werden usw. Muss ich die entsprechenden Redirect-Anweisungen in der .htaccess-Datei für jedes einzelne Dokument eintragen oder komme ich irgendwie mit Wildcards weiter? Bei google und hier im Forumsarchiv habe ich auf den ersten Blick nichts gefunden.
Erste Anlaufstelle sollte die jeweilige Anleitung sein: http://httpd.apache.org/docs/mod/mod_alias.html#redirectmatch.
Denk daran, daß Du den Statuscode angibst! Du möchtest sicherlich statt der standardmäßigen vorübergehenden Umleitung ("temporary") eine permanente ("permanent") haben (siehe http://httpd.apache.org/docs/mod/mod_alias.html#redirect).
Gruß,
soenk.e
ich muss eine ganze Anzahl an Dateien, die alle die gleiche Namensstruktur haben, in neue Unterverzeichnisse packen. Die Datei "/abc0101.htm" soll dann "/abc/abc0101.htm" heißen, aus "/abc0102.htm" soll "abc/abc0102.htm" werden usw. Muss ich die entsprechenden Redirect-Anweisungen in der .htaccess-Datei für jedes einzelne Dokument eintragen oder komme ich irgendwie mit Wildcards weiter? Bei google und hier im Forumsarchiv habe ich auf den ersten Blick nichts gefunden.
Erste Anlaufstelle sollte die jeweilige Anleitung sein: http://httpd.apache.org/docs/mod/mod_alias.html#redirectmatch.
Denk daran, daß Du den Statuscode angibst! Du möchtest sicherlich statt der standardmäßigen vorübergehenden Umleitung ("temporary") eine permanente ("permanent") haben (siehe http://httpd.apache.org/docs/mod/mod_alias.html#redirect).
Gruß,
soenk.e
Erst einmal danke für die Antwort. Dein Link erläutert, wie ich eine Umleitung machen kann, wenn ich alle Dateien in ein und dasselbe neue Unterverzeichnis lege. Meine Schuld - das Beispiel war verkürzt dargestellt.
In einem Verzeichnis XYZ habe ich Dateien der Struktur "abc0101.htm", "abc0102.htm", aber auch "def0101.htm", "def0102.htm" usw. Die "abc"-Dateien sollen jetzt in ein neues Unterverzeichnis "abc" (Ziel also /xyz/abc/abc0101.htm usw), die anderen ins Unterverzeichnis "def" (also /xyz/def/def0101.htm usw.).
Der Eintrag in der htaccess-Datei müsste also etwa lauten:
"RedirectMatch Permanent /xyz/abc*.htm http://www.meinehomepage.de/xyz/abc/abc*.htm" und
"RedirectMatch Permanent /xyz/def*.htm http://www.meinehomepage.de/xyz/def/def*.htm".
Wie soll denn da der Platzhalter aussehen - etwa "abc(.*).htm?
Gruß,
Jan
http://httpd.apache.org/docs/mod/mod_alias.html#redirectmatch.
In einem Verzeichnis XYZ habe ich Dateien der Struktur "abc0101.htm", "abc0102.htm", aber auch "def0101.htm", "def0102.htm" usw. Die "abc"-Dateien sollen jetzt in ein neues Unterverzeichnis "abc" (Ziel also /xyz/abc/abc0101.htm usw), die anderen ins Unterverzeichnis "def" (also /xyz/def/def0101.htm usw.).
Da habe ich Dich schon richtig verstanden:
/xyz/(abc|def)(.*) http://bla.bla/xyz/$1/$2
Alternativ auch so (wenn das Schema "Buchstaben+Zahlen" ist):
/xyz/([a-z]+)(.*) http://bla.bla/xyz/$1/$2
Oder so (wenn das Schema "drei Buchstaben+Rest" ist):
/xyz/([a-z]{3})(.*) http://bla.bla/xyz/$1/$2
Oder so (wenn das Schema "drei Zeichen+Rest" ist):
/xyz/(.{3})(.*) http://bla.bla/xyz/$1/$2
Sollte eigentlich funktionieren.
Gruß,
soenk.e
(Ziel also /xyz/abc/abc0101.htm usw),
Da habe ich Dich schon richtig verstanden:
..aber leider gepennt, statt
/xyz/(abc|def)(.*) http://bla.bla/xyz/$1/$2
sollte es dann natürlich
/xyz/(abc|def)(.*) http://bla.bla/xyz/$1/$1$2
sein, wenn der Dateiname gleichbleiben soll (alle anderen analog).
Sorry,
soenk.e
/xyz/(abc|def)(.*) http://bla.bla/xyz/$1/$2
sollte es dann natürlich
/xyz/(abc|def)(.*) http://bla.bla/xyz/$1/$1$2
Nö,
funktioniert leider nicht. Im besten Fall werde ich nach deinem Muster auf "www.meinehomepage.de/xyz/abc/abc(.*).htm" weitergeleitet. In den anderen Fällen ist der Browser in einer Art Endlosschleife gefangen, in der er immer wieder www.meinehomepage.de kontaktiert. Nu denn, dann mache ich den Redirect für jedes Dokument.
Ich danke dir herzlich für deine Mühe.
Schöne Grüße,
Jan
/xyz/(abc|def)(.*) http://bla.bla/xyz/$1/$1$2
Nö,
Das kann ich so nicht stehen lassen :)
Nach reiflicher Überlegung und extensivem Einsatz von telnet stelle ich hiermit zu meiner Ehrenrettung fest, daß folgendes definitiv funktioniert:
^/xyz/(abc|def)([^/]+)$ http://bla.bla/xyz/$1/$1$2
Dieses Muster reagiert nicht mehr auf Adressen, die nach abc oder def noch einen Schrägstrich haben ( [^/] ). Andersrum ausgedrückt: Es reagiert nur noch auf Adressen, die sich auf "Dateien" im Verzeichnis xyz beziehen, nicht mehr auf Unterverzeichnisse von xyz.
Außerdem muß abc... bzw. def... der letzte Teil der Adresse sein ( $ am Ende des Musters) und es muß nach abc bzw. def noch mindestens ein Zeichen folgen (das + hinter [^/] bedeutet "ein oder mehrere des davorstehenden").
Last but not least wird davon ausgegangen, daß eine komplette Adresse verglichen wird, /xyz muß also am Anfang der URL stehen, direkt nach dem Hostnamen ( ^ ganz vorne).
Gruß,
soenk.e
Das kann ich so nicht stehen lassen :)
Nach reiflicher Überlegung und extensivem Einsatz von telnet stelle ich hiermit zu meiner Ehrenrettung fest, daß folgendes definitiv funktioniert:
^/xyz/(abc|def)([^/]+)$ http://bla.bla/xyz/$1/$1$2
soenk.e
So funktioniert's - recht herzlichen Dank, hat mir eine Menge Arbeit erspart.
Schöne Grüße,
Jan
^/xyz/(abc|def)([^/]+)$ http://bla.bla/xyz/$1/$1$2
Jetzt wirds doch noch ein bißchen komplizierter: Ich will nur die Dateien ins neue Unterverzeichnis weiterleiten, auf die nach "abc" bzw. "def" vier Ziffern folgen. "abc.htm" bzw. "abcblablabla.htm" sollen artigst bleiben, wo sie sind. Ich habe aller erdenklichen Kombinationen mit dem Rautenzeichen versucht (soviel ich weiß das Symbol für Ziffern), führte aber im höchstens zum Error 500...
Gruß,
Jan