Beliebte mod_rewrite-Fehler
Published 2006-08-19, 18:21
Unter den Rewriteflags werden in der Dokumentation zu mod_rewrite 4 wichtige Punkte angesprochen. Dummerweise werden diese durch die blaue Box nicht etwa hervorgehoben, sondern rücken eher in den Hintergrund.
Dies ist schade, denn würde jeder Webmaster der mit mod_rewrite herumspielt diese Regeln durchlesen, gäbe es viel weniger Missverständnisse und Verwirrung was die Funktionsweise der RewriteRules angeht. Deshalb hier nochmal:
Note: Enabling rewrites in per-directory context
To enable the rewriting engine for per-directory configuration files, you need to set „RewriteEngine On“ in these files and „Options FollowSymLinks“ must be enabled. If your administrator has disabled override of FollowSymLinks for a user’s directory, then you cannot use the rewriting engine. This restriction is needed for security reasons.
Ganz beliebter Fehler Nutzung von mod_rewrite bei Hostern wie Hosteurope.
Note: Pattern matching in per-directory context
Never forget that Pattern is applied to a complete URL in per-server configuration files. However, in per-directory configuration files, the per-directory prefix (which always is the same for a specific directory) is automatically removed for the pattern matching and automatically added after the substitution has been done. This feature is essential for many sorts of rewriting – without this, you would always have to match the parent directory which is not always possible.
There is one exception: If a substitution string starts with „http://“, then the directory prefix will not be added, and an external redirect or proxy throughput (if flag P is used) is forced!
Wenn man das einmal verstanden hat, werden die Regeln viel klarer.
Note: Substitution of Absolute URLs
When you prefix a substitution field with http://thishost[:thisport], mod_rewrite will automatically strip that out. This auto-reduction on URLs with an implicit external redirect is most useful in combination with a mapping-function which generates the hostname part.
Remember: An unconditional external redirect to your own server will not work with the prefix http://thishost because of this feature. To achieve such a self-redirect, you have to use the R-flag.
Das versteh ich ehrlich gesagt selbst nich 😉
Note: Query String
The Pattern will not be matched against the query string. Instead, you must use a RewriteCond with the %{QUERY_STRING} variable. You can, however, create URLs in the substitution string, containing a query string part. Simply use a question mark inside the substitution string, to indicate that the following text should be re-injected into the query string. When you want to erase an existing query string, end the substitution string with just a question mark. To combine a new query string with an old one, use the [QSA] flag.
Probleme mit Queries gehören nach Verstehen dieses Absatzes zum Glück auch der Vergangenheit an.
( 1 )
Der Teil:
Soll mE heissen:
Wenn die rewrite rule als Ersatz-URL eine absolute URL inklusive http://… liefert, die auf den eigenen Host verweisen würde, wird aus dem externen Verweis (über http://) ein interner Verweis (beginnend mit dem Root-Ordner) erzeugt. Damit werden rewrites unterstützt, die den Hostname neu schreiben (a la no-www.org).
So jedenfalls sehe ich das.
Comment von Robert Wetzlmayr am 27. August 2006
( 2 )
Ahh, macht Sinn. Ich hatte das „this“ vor „host“ und „port“ überlesen und mich gewundert. Danke!
Comment von Jan am 27. August 2006