Modul mod_rewrite, Teil 2

Im letzten Kapitel haben wir gelernt, die Grundlagen der Modul mod_rewrite. In dem Beispiel, das diskutiert wurde, haben wir ein Design, das bedeutet wörtlich: "Wenn jemand die .htaccess-Datei zuzugreifen versucht, eine Fehlermeldung ausgegeben, dass der Zugang unter Angabe verweigert."

Diese "Regel" global, das heißt, jeder wird die obige Fehlermeldung angezeigt. dass mod_rewrite Recall ist ein Modul , das eine bietet "regelbasierten Mechanismus , um dynamisch die angeforderte URL-s ändern."

Wir können die "Regel" durch verschiedene begrenzen "Bedingungen der Regeln." "Regel" wird nur dann ausgeführt werden, wenn eine Reihe von Bedingungen, bevor sie erfüllt werden.

Syntax: Die Bedingung muss die Regel vorausgehen!

Nehmen wir ein anderes Beispiel (Eintrag in der .htaccess - Datei): RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon RewriteRule ^.*$ - [F]

Die ersten drei wurden ausführlich im ersten Teil der Veröffentlichung bedeckt. Ihre Funktion - Aufnahme von "Rewriting Engine", das heißt, das Modul selbst.

Die letzten beiden Zeilen verbieten Zugang Crawler Codenamen «EmailSiphon» (gemeint ist der User-Agent-Name). Dieser Roboter ist ein Sammler von E-Mail-Adressen von Web-Seiten.

Line: RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon

Es besteht aus drei Teilen:

Richtlinie (bitte angeben): RewriteCond
Verification string:% {HTTP_USER_AGENT}
Probenbedingungen: ^ EmailSiphon

Teststring - eine Server-Variable, die in einer allgemeinen Form geschrieben werden kann: "% {variable}."

Probenbedingungen - regulärer Ausdruck. Für ein vollständigeres Verständnis des Themas ist ein regulärer Ausdruck als eine Klasse.

Reguläre Ausdrücke

Reguläre Ausdrücke - ein Mechanismus, der Sie das Muster für die Zeichenfolge festlegen können und nach Daten suchen in einem bestimmten Text zu dem Muster entspricht. Darüber hinaus zusätzliche Funktionen für mit solchen Ausdrücken handelt, damit die Ergebnisdaten in einem Array von Reihen Substitutionsmuster im Text zu erhalten, die Unterteilungslinien für Muster usw. Jedoch ist ihre Hauptaufgabe, die auf allen anderen basiert, ist es eine Suchfunktion in der Textdaten, die dem Muster (Muster) entsprechen, wie in der Syntax von regulären Ausdrücken beschrieben.

Reguläre Ausdrücke sind ähnlich einem kleinen, kompakten Sprache in seinem eigenen Recht.

Zum Beispiel kann der reguläre Ausdruck: s/abc/xyz/g

«Abc» Linie auf der Linie «xyz» den ganzen Text zu ersetzen.

Hier ein kurzer Überblick über die wichtigsten Elemente mit einigen Beispielen:

. (Dot) - Text (beliebiges Zeichen)
| - Makeln (dh / abc | def /)
* - Quantifizierer (kann jede beliebige Zahl)
* $ - Anchor Linie
s - Operator (string1 durch string2 ersetzt)
g - Modifikator (den gesamten Textsuche)

Reguläre Ausdrücke sind so konstruiert, diese Elemente und andere "normale" Zeichen. Sie sind nicht eine eigene Sprache, wie durch andere Mittel verwendet werden, wie Programmiersprachen wie Perl und PHP , sowie Text - Editoren (Emacs).

Wenn wir über die Beziehung von regulären Ausdrücken und Modul mod_rewrite sprechen, werden sie in den Richtlinien RewriteRule und RewriteCond verwendet.

"*" Zeigt den Beginn der Zeile. Daraus folgt, dass die Useragent mit der Zeichenfolge «EmailSiphon» beginnen muss und nicht mit etwas anderem ( «NewEmailSiphon», zum Beispiel, würde nicht funktionieren).

Aber wie dieser reguläre Ausdruck nicht das Symbol enthält "$" (Zeilenende Anker), Useragent sein könnte, zum Beispiel, «EmailSiphon2».

Die letzte Zeile unseres Beispiels: RewriteRule ^.*$ - [F]

Es legt fest, was zu tun ist, wenn eine Spinne Zugriff anfordert.

Der reguläre Ausdruck "^. * $" Bedeutet "Zugriff auf alle Dateien verweigert wird."

Der Punkt, in dem regulären Ausdruck "." - Meta-Symbol (Wild Card) und bedeutet einen beliebigen Charakter.

"*" Zeigt an, dass die Zeile beliebig oft erfolgen kann. In diesem Fall unabhängig vom Namen der angeforderten Datei, wird ein Fehler ausgegeben.

«EmailSiphon», natürlich nicht die einzige E-Mail-Mähdrescher. Ein weiteres berühmtes Mitglied dieser Familie - «ExtractorPro». Lassen Sie uns sagen, dass wir den Zugang zu verweigern wollen, und dieser Roboter. In diesem Fall müssen wir eine weitere Bedingung.

Nun .htaccess - Datei würde wie folgt aussehen: RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro RewriteRule ^.*$ - [F]

Das dritte Argument [OR] (RewriteCond in der ersten Reihe) "Flagge" genannt. Es gibt zwei mögliche Fahnen:

NC - wird nicht zwischen Groß- und Kleinschreibung.
OR - Mittel "oder die folgende Bedingung."

NC Checkbox können Sie den Fall von Buchstaben in der Zielprobe zu ignorieren. Zum Beispiel: RewriteCond %{HTTP_USER_AGENT} ^emailsiphon [NC]

Diese Zeile gibt an, dass "emailsiphon" und "EmailSiphon" als identische Ausdrücke erkannt werden.

Sie können durch Komma mehrere Flaggen, getrennt verwenden. RewriteCond % {HTTP_USER_AGENT} ^EmailSiphon [NC, OR] RewriteCond % {HTTP_USER_AGENT} ^ExtractorPro NC, OR] RewriteCond% {HTTP_USER_AGENT} ^ ExtractorPro RewriteCond % {HTTP_USER_AGENT} ^EmailSiphon [NC, OR] RewriteCond % {HTTP_USER_AGENT} ^ExtractorPro

Es gibt keine Beschränkungen hinsichtlich der Anzahl von Bedingungen. So können Sie 10, 100, 1000 oder mehr bekannten Mail-Sammler blockieren. Die Definition dieser Begriffe in 1000 - nur eine Frage der Server und Transparenz «.htaccess» Datei.

In dem obigen Beispiel wird eine globale Variable «HTTP_USER_AGENT». Es gibt auch andere Variablen:

REMOTE_HOST
REMOTE_ADDR

Zum Beispiel, wenn Sie die Spinne Kommend von www.site.ru zu blockieren möchten, können Sie eine globale Variable «REMOTE_HOST» verwenden also: RewriteCond % {REMOTE_HOST} ^www.site.ru$ RewriteRule ^.*$ - [F]

Wenn Sie eine bestimmte IP - Adresse blockieren möchten, würde die Bedingung wie folgt aussehen: RewriteCond % {REMOTE_ADDR} ^212.37.64.10$ RewriteRule ^.*$ - [F]

In einem regulären Ausdruck, die genaue und füllen Sie die IP-Adresse die Start- und End-Anker verwenden möchten, um zu überprüfen.

Sie können auch eine Reihe von auszuschließen: RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F] RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F] ] RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F]

Dieses Beispiel zeigt, wie eine Reihe von IP-Adressen von 212.37.64.0 auf 212.37.64.255 zu blockieren.

Aber auch kleine Aufgabe zu testen , die erworbenen Kenntnisse (im nächsten Abschnitt gegeben werden): RewriteCond %{REMOTE_ADDR} ^212.37.64 RewriteRule ^.*$ - [F]

Aufmerksamkeit auf die Frage!

Wenn wir schreiben den regulären Ausdruck "^ 212.37.64" anstelle von "^ 212.37.64." (Punkt am Ende), oder ob es die gleiche Wirkung zu verleihen, und die gleiche IP - Adresse wird sein , ob das ausgeschlossen?

Bisher haben wir ein einfaches RewriteRule verwendet, die eine Fehlermeldung erzeugt. Im dritten Teil dieser Arbeit untersuchen wir, wie RewriteRule zu verwenden, um Besucher auf bestimmte Dateien umleiten.