Das mit dem mod-rewrite habe ich bisher nicht wirklich verstanden, sondern immer nur die Beispiele kopiert und gehofft, dass es funktioniert. Jetzt will ich aber alle domains in eine modx engine packen und muss mich wohl oder übel mit dem Problem beschäftigen.
Hier sammle ich meine Erkenntnisse:
Aus der Doku von
mod_rewrite
The order of rules in the ruleset is important because the rewrite engine processes them in a particular (not always obvious) order, as follows: The rewrite engine loops through the rulesets (each ruleset being made up of RewriteRule directives, with or without RewriteConds), rule by rule. When a particular rule is matched, mod_rewrite also checks the corresponding conditions (RewriteCond directives). For historical reasons the conditions are given first, making the control flow a little bit long-winded.
Als erstes: Apache arbeitet die Zeilen in der .htaccess nicht von oben nach unten ab sondern sucht erst nach den Regeln und prüft dann ob Bedingungen dafür vorliegen.
Die Regel wird nach folgendem Muster erstellt:
CODE:
RewriteRule Pattern Substitution
Pattern ist dabei eine Zeichenfolge, die überprüft wird. Wenn es mit dem übergebenen Wert (der URL) eine Übereinstimmung gibt, wird in den Zeilen
davor nach einer Bedingung gesucht. Dabei werden die Bedingungenl aber von oben nach unten abgearbeitet.
Wenn eine Bedingung verwendet werden soll muss diese folgendermaßen aussehen:
CODE:
RewriteCond TestString CondPattern
Teststring ist der Text, der überprüft werden soll. Durch Angabe von $N (0 <= N <= 9) wird die URL aus der Zeichenfolge (Pattern) der Regel (RewriteRule) verwendet. Wird %N (1 <= N <= 9) angegeben wird die Übergabe einer weiter oben liegenden Bedingung (RewriteCond) verwendet. Außerdem können RewriteMap oder Server-Variables wie z. B. HTTP_HOST oder PATH_INFO (Syntax: %{HTTP_HOST}) verwendet werden. Es muss also nicht zwingend die URL sein, die eine Bedingung erfüllt.
Wenn die Bedingung erfüllt ist, wird zu nächsten Bedingung gegangen. Es müssen also alle Bedingungen, die aufeinander folgen erfüllt sein (UND Verknüpfung). Die Bedingungen können auch durch OR miteinander verknüpft werden.
Wenn die Bedingungen erfüllt sind, wird der Pattern durch Substitution ersetzt.
Folgen mehrer Regeln hintereinander wird jeweils die Substitution der vorhergehenden Regel zum Pattern der nächsten.
CODE:
Text:
. Any single character
[chars] Character class: Any character of the class ``chars''
[^chars] Character class: Not a character of the class ``chars''
text1|text2 Alternative: text1 or text2
Quantifiers:
? 0 or 1 occurrences of the preceding text
* 0 or N occurrences of the preceding text (N > 0)
+ 1 or N occurrences of the preceding text (N > 1)
Grouping:
(text) Grouping of text
(used either to set the borders of an alternative as above, or
to make backreferences, where the Nth group can
be referred to on the RHS of a RewriteRule as $N)
Anchors:
^ Start-of-line anchor
$ End-of-line anchor
Escaping:
\char escape the given char
(for instance, to specify the chars ".[]()" etc.)
Negation:
! to negate a pattern