Zur Navigation

Mod_rewrite: Zeichen escapen

1 Jörg

Im Zusammenhang mit Mod_rewrite werden häufig reguläre Ausdrücke (regex) verwendet, um ein Muster für böse Bots oder Refererspam zu erstellen, das man blocken möchte, oder für Regeln, nach denen URLs rewritet werden. Für die Regex gibt es einige Zeichen, die eine bestimmte Bedeutung haben, der Punkt steht beispielsweise für ein beliebiges Zeichen. Eine häufige Fehlerquelle für nicht funktionierende Regeln in Mod_rewrite ist es, dass Sonderzeichen nicht maskiert werden, wenn diese als gewöhnliche Zeichen gebraucht werden. Möchte man z.B., dass der Punkt nur einen Punkt bezeichnet, muss man diesen "escapen", das heißt ihm einen Backslash vorsetzen: \.

Folgende Zeichen müssen maskiert werden, wenn sie nicht als Sonderzeichen gebraucht werden:

Punkt: \.
eckige Klammer: \[
Backslash: \\
Zirkumflex: \^
Dollarzeichen: \$
Vertikale Linie: \|
Fragezeichen: \?
Sternchen: \*
Plus Zeichen: \+
Runde Klammern: \( \)
Leerzeichen: \

Beispiel:
Möchte man den Emailharvester "Mozilla/4.0 (compatible; MSIE 5.00; Windows 98" der Liste der bösen Bots hinzufügen, muss man Klammer, Leerzeichen und Punkt escapen:


RewriteEngine on

# ... Anfang der Liste...
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 5\.00;\ Windows\ 98 [OR]
# ... Fortsetzung der Liste...
RewriteRule ^.* - [F]

22.12.2004 08:06 | geändert: 22.12.2004 08:09

Beitrag schreiben (als Gast)





[BBCode-Hilfe]