Module Mod_rewrite, partie 2

Dans le dernier chapitre, nous avons appris les rudiments de modules mod_rewrite. Dans l'exemple qui a été discuté, nous avons utilisé une conception qui signifie littéralement: «Si quelqu'un tente d'accéder au fichier .htaccess, émis un message d'erreur indiquant que l'accès est refusé."

Cette «règle» à l'échelle mondiale, qui est, chaque recevra le message d'erreur ci-dessus. Rappelons que mod_rewrite est un module qui fournit un "mécanisme fondé sur des règles pour modifier dynamiquement l'URL de la demande."

Nous pouvons limiter la «règle» à travers diverses "conditions des règles." "Règle" sera effectuée que si un certain nombre de conditions à remplir avant lui.

Syntaxe: La condition doit précéder la règle!

Prenons un autre exemple (entrée dans le fichier .htaccess): RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon RewriteRule ^.*$ - [F]

Les trois premiers ont été traitées en détail dans la première partie de la publication. Leur fonction - inclusion de "moteur de réécriture" qui est, le module lui-même.

Les deux dernières lignes interdisent l'accès des robots nom de code «EmailSiphon» (ce qui signifie le nom de l'agent utilisateur). Ce robot est un collecteur d'adresses e-mail à partir de pages Web.

Ligne: RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon

Il se compose de trois parties:

Directive (préciser): RewriteCond
chaîne de vérification:% {HTTP_USER_AGENT}
Conditions de l'échantillon: ^ EmailSiphon

Chaîne de test - une variable de serveur, qui peut être écrit sous une forme générale: "% {variable}."

Conditions de l'échantillon - expression régulière. Pour une compréhension plus complète du sujet est une expression régulière en tant que classe.

Les expressions régulières

Les expressions régulières - un mécanisme qui vous permet de définir le modèle de la chaîne et de rechercher des données correspondant à la configuration dans un texte donné. En outre, des fonctions supplémentaires pour traiter ces expressions permettent d'obtenir des données de résultats dans un tableau de configuration des lignes de substitution dans le texte, les lignes de séparation pour motif, etc. Cependant, leur fonction principale, qui est basée sur tous les autres, il est une fonction de recherche dans les données de texte qui correspondent au motif (échantillon) tel que décrit dans la syntaxe des expressions régulières.

Les expressions régulières sont semblables à une petite langue compacte dans son propre droit.

Par exemple, l'expression régulière: s/abc/xyz/g

remplacer «abc» en ligne sur la ligne «xyz» dans tout le texte.

Voici un bref aperçu des éléments les plus importants avec quelques exemples:

. (Dot) - texte (tout caractère)
| - Alternation (ie, / abc | def /)
* - Quantifier (peut être un nombre quelconque)
* $ - Ligne de mouillage
s - opérateur (string1 remplacé par string2)
g - modificateur (recherche dans le texte intégral)

Les expressions régulières sont construites en utilisant ces éléments et d'autres personnages «ordinaires». Ils ne sont pas une langue distincte, tel qu'il est utilisé par d' autres moyens, tels que les langages de programmation tels que Perl et PHP , ainsi que des éditeurs de texte (Emacs).

Si nous parlons de la relation des expressions régulières et module mod_rewrite, ils sont utilisés dans les directives RewriteRule et RewriteCond.

"*" Indique le début de la ligne. Il en résulte que le UserAgent doit commencer par la chaîne «EmailSiphon» et non pas avec quoi que ce soit d'autre ( «NewEmailSiphon», par exemple, ne fonctionnerait pas).

Mais comme cette expression régulière ne contient pas le symbole «$» (fin de l'ancre de la ligne), UserAgent pourrait être, par exemple, «EmailSiphon2».

La dernière ligne de notre exemple: RewriteRule ^.*$ - [F]

Il définit ce qu'il faut faire quand une araignée demande l'accès.

L'expression régulière "^. * $" Signifie "l'accès à tous les fichiers est refusé."

Le point dans l'expression régulière "." - Meta symbole (wildcard) et signifie tout caractère aléatoire.

"*" Indique que la ligne peut se produire un certain nombre de fois. Dans ce cas, quel que soit le nom du fichier demandé, une erreur sera émis.

«EmailSiphon», bien sûr, pas le seul récolteuse email. Un autre membre célèbre de cette famille - «ExtractorPro». Disons que nous voulons refuser l'accès, et ce robot. Dans ce cas, nous avons besoin d'une autre condition.

Maintenant, le fichier .htaccess ressemblerait à ceci: RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro RewriteRule ^.*$ - [F]

Le troisième argument [OR] (RewriteCond dans la première rangée) est appelé «drapeau». Il y a deux drapeaux possibles:

NC - ne sont pas sensibles à la casse.
OU - des moyens "ou la condition suivante."

NC case vous permet d'ignorer le cas de lettres dans l'échantillon cible. Par exemple: RewriteCond %{HTTP_USER_AGENT} ^emailsiphon [NC]

Cette ligne spécifie que "EmailSiphon" et "EmailSiphon" seront reconnus comme des expressions identiques.

Vous pouvez utiliser plusieurs drapeaux, séparés par des virgules. 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

Il n'y a aucune restriction quant au nombre de conditions. Ainsi, vous pouvez bloquer 10, 100, 1000 ou plus connus des collecteurs de mails. La définition de ces termes en 1000 - juste une question de serveur et la transparence «.htaccess» fichier.

Dans l'exemple ci-dessus utilise une variable globale «HTTP_USER_AGENT». Il y a aussi d'autres variables:

REMOTE_HOST
REMOTE_ADDR

Par exemple, si vous voulez bloquer l'araignée comming de www.site.ru, vous pouvez utiliser une variable «REMOTE_HOST» mondiale ainsi: RewriteCond % {REMOTE_HOST} ^www.site.ru$ RewriteRule ^.*$ - [F]

Si vous voulez bloquer une adresse IP spécifique, l'état devrait ressembler à ceci: RewriteCond % {REMOTE_ADDR} ^212.37.64.10$ RewriteRule ^.*$ - [F]

Dans une expression régulière pour vérifier l'exacte et complète l'adresse IP que vous souhaitez utiliser les ancres de début et de fin.

Vous pouvez également exclure une gamme de: RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F] RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F] ] RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F]

Cet exemple montre comment bloquer une plage d'adresses IP à partir 212.37.64.0 sur 212.37.64.255.

Mais une mince tâche de tester les connaissances acquises (doit être donnée dans la section suivante): RewriteCond %{REMOTE_ADDR} ^212.37.64 RewriteRule ^.*$ - [F]

Attention à la question!

Si nous écrivons l'expression régulière "^ 212.37.64" au lieu de "^ 212.37.64.» (Dot à la fin), ou si elle va donner le même effet et la même adresse IP sera de savoir si les exclus?

Jusqu'à présent, nous avons utilisé un RewriteRule simple, qui génère un message d'erreur. Dans la troisième partie de cet article, nous analysons comment utiliser RewriteRule pour rediriger les visiteurs vers des fichiers spécifiques.