| Code du fichier .htaccess pour redirection |
Outils pour webmaster. Trucs et astuces en code HTML, JavaScript, PHP : améliorer son site internet
Code du fichier .htaccess pour applications, aspirateurs et sites
indésirables.
- Recopiez ce code dans NotePad, assurez-vous qu'il n'y a pas d'espaces
en bout de ligne mais bien un retour chariot.
Vous aurez vu, tout d'abord, comment écrire,
enregistrer et transférer en FTP le fichier .htaccess.
AVERTISSEMENT :
tous les USER_AGENT ci-dessous n'ont pas été vérifiés. Cette liste est une compilation
de différentes statistiques sur les aspirateurs du web, les aspirateurs d'e-mail et les
applications indésirables. Elles est donnée à titre d'exemple et pour les noms des
applications qui sont, en principe, à bannir. Chaque webmaster ayant des besoins
différents, certain ne souhaiteront pas faire figurer dans cette liste un ou plusieurs
USER_AGENT. Des essais et une surveillance étroite sont à prévoir en cas
d'installation tel quel.
Cependant, cette liste fonctionne parfaitement sur ce site. Pour une liste plus
complète, ajoutez celle des USER_AGENT vérifiés, ce qui vous fera plus de 300
applications rejetées de votre site. De quoi freiner les ardeurs.
La liste vérifiée des USER_AGENT doit
servir de base, et un examen des nombreux autres agents ci-dessous est à réaliser.
Merci de signaler ceux que
vous aurez contrôlés ainsi que ceux qui ne se trouvent pas dans cette liste, ceci
profitera à tous les webmasters.
Pour bloquer un indésirable par l'IP,
plutôt que par le USER_AGENT, c'est ICI.
Pour un gain de rapidité d'accés au fichier .htaccess, voir la version compacte du code ci-dessus.
- Lorsque vous ajoutez un agent, vous pouvez copier une ligne quelconque, la
positionner en bout d'une autre, dans l'ordre alphabétique, et effectuer manuellement un
retour chariot. Changez le nom de l'agent à ce moment là :
RewriteCond %{HTTP_USER_AGENT} almaden [OR](retour
chariot manuel à ne pas mettre à la dernière condition)RewriteCond %{HTTP_USER_AGENT} .*nouvel agent* [OR]
- Choisissez un site particulièrement agressif pour remplacer http://www.autre_site.com,
ce ne sera que le juste retour des choses, ou renvoyez sur une page 403 (voir plus bas).
- Si vous avez des lignes telles que ErrorDocument 404
/404.php et/ou ErrorDocument 401 /401.php
etc, placez-les après ou avant (de préférence) RewriteRule
^.*$ http://www.autre_site.com [R,L], des essais devant être fait suivant
la configuration de votre hébergeur. Mais en principe, RewriteRule prend le pas.
- De par les nombreuses versions des applications ci-dessus, et des possibles changements
de casse, il vaudra mieux écrire dans le fichier .htaccess :
RewriteCond %{HTTP_USER_AGENT} ^frontpage$
[NC,OR]
pour MS FrontPage (5.0)
Le caractère ^ indiquant le début du test de la
chaîne et $ la fin. NC indiquant que le nom peut être lu comme frontpage
ou FrontPage
- La fonction RewriteCond est sensible à la casse. Si vous avez des
doutes sur la casse du nom, ou que ce nom se présente sous différentes casses (ex : frontpage
et FrontPage) ajoutez [NC] dans [OR]
sous la forme [NC,OR] qui va indiquer que le nom est Non
Case sensitive, c'est-à-dire qu'il ne sera pas tenu compte de la casse
des caractères.
- Si le nom du USER_AGENT contient un espace, vous devez mettre un
anti-slash avant cet espace. Exemple : Xaldon WebSpider devra s'écrire Xaldon\
WebSpider
- Le signe ^ doit se trouver devant le nom (ex : ^Siphon).
Il désigne la suite exacte des caractères qui doivent se trouver derrière. Mais dans
cet exemple, le nom véritable est EmailSiphon. On peut donc écrire *Siphon,
car * indique qu'une partie des caractères qui suivent
contient Siphon.
Cette méthode est préférable car le nom du navigateur peut être noyé dans d'autres
informations.
Ainsi, si vous spécifiez :
^HTTrack vous risquez de passer à côté de :
Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98) qui est le véritable HTTP_USER_AGENT.
Il vaut mieux donc écrire :
RewriteCond %{HTTP_USER_AGENT} .*HTTrack [OR]
- Suivant la configuration, le code de détection et de redirection peut
ne pas fonctionner sur certains serveurs Apache. Vous devrez l'utiliser avec prudence et
effectuer une batterie d'essais à des heures où votre site est peu fréquenté.
* Installez deux ou trois aspirateurs pour capturer votre site. Essayez de l'éditer avec
FrontPage et/ou d'autres éditeurs HTML.
* Surveillez vos erreurs 404, recherchez votre site à partir des moteurs et annuaires les
plus connus (Google, Voilà, etc) et cliquez sur votre lien pour bien vous assurer que les
internautes puissent y accéder.
* Visitez votre site avec des navigateurs différents et des versions différentes.
* N'effectuez pas les tests avec la liste complète. Commencez vos tests avec 1 seul
aspirateur. Puis, ajoutez-en au fur et à mesure.
- Attention à ne pas interdire n'importe quoi ou n'importe qui. Ne sombrez pas dans la
paranoïa. Par exemple Xenu est une application qui teste la validité
des liens d'un site, ce qui vous interdit donc de le faire pour votre propre usage. Il se
peut aussi qu'un webmaster teste le sien et donc le lien qu'il a fait avec le vôtre. Il
ne faudra donc pas qu'une erreur 403 lui soit retournée. Il existe aussi des applications
servant aux régies d'échange de bannières qui ne sont pas forcément à exclure.
Autre exemple : si vous trouvez un navigateur non renseigné, il se peut que ce soit un
spider de Voila (identifiable avec le nom de domaine x1crawler3-1-0.x-echo.com.
En principe vous devez ne pas l'interdire. Néanmoins, vous pouvez le faire en entrant la
ligne : RewriteCond %{HTTP_USER_AGENT} ^-?$ [OR]
qui interdira tous les navigateurs non-renseignés car la majorité de ceux_ci posent
problème.
- Evitez de faire vos tests en fin et début de mois. C'est à ce moment là, en principe,
que passe les spiders de Google. Renseignez-vous sur la période des passages.
- Au lieu de rediriger l'intrus sur un site, vous pouvez lui renvoyer une page 403
standard par : RewriteRule ^.* - [F,L]
Dans ce cas, vous pourriez générer un hit par l'appel de cette page, ce que vous devez
éviter si vous cherchez à réduire le nombre de hits.
- Il est préférable de renvoyer la requête sur une page d'erreur 403 personnalisée
extérieure à votre site que vous aurez mise chez un hébergeur gratuit ou peu limité en
nombre de hits ou de volume de trafic.
- Utilisez un mail gratuit (Yahoo!) qui fonctionne en POP et qui ne vous servira qu'à recevoir les messages d'erreur. Pour plus de sécurité, vous utiliserez une application qui chargera les en-têtes des mails afin de visualiser avant de les charger et les enregistrer sur votre disque dur. Ceci vous évitera de recevoir des virus par quelqu'un de mal intentionné. Vous pouvez utiliser l'utilitaire gratuit Mail Washer qui effectue cette fonction.
- Quelques explications sur les codes employés :
RewriteEngine on : ouverture de la fonction de réécriture.
RewriteEngine off : fermeture de la fonction de réécriture.
RewriteCond : la ligne qui va définir le nom des applications ou sites
soumis à réécriture.
HTTP_USER_AGENT : le nom de l'application
RewriteRule : définition de la règle de redirection
^ Début de la séquence d'une chaîne de
caractères.
$ indique la fin du test d'une chaîne de
caractères (peut être omit).
Vous pouvez ainsi écrire :
RewriteCond %{HTTP_USER_AGENT} ^eCatch$ [OR]
ou
RewriteCond %{HTTP_USER_AGENT} eCatch [OR]
La recherche et le résultat sur l'expression seront les mêmes. Mais si on prend
l'exemple d'un aspirateur de site qui se nommerait Slur website v.1.3 et
que vous écriviez :
RewriteCond %{HTTP_USER_AGENT} Slur [OR]
vous aller bloquer le crawler d'Inktomi car si vous ne mettez pas les caractères
spéciaux ^ et $
.htaccess testera aussi toutes les expressions contenant, entre autre, "Slurp"
qui est les USER_AGENT d'Inktomi.
Par contre, si vous écrivez :
RewriteCond %{HTTP_USER_AGENT} ^Slur$ [OR]
l'expression à bloquer devra obligatoirement commencer par " S
", le deuxième caractère devra être un " l ", le
troisième " u " et ainsi de suite jusqu'au dernier caractère,
signalé par $, qui sera un " r " le résultat
devant être exactement Slur.
et :
^Slurpwebsite recherche toute expression
contenue dans une chaîne commençant par Slurpwebsite
(comme Slurpwebsites ou Slurpwebsiteweb) équivalant à ^Slurpwebsite.*$
Slurpwebsite$ recherche toute expression
finissant par Slurpwebsite (comme WebSlurpwebsite) équivalant à ^.*Slurpwebsite$
Prenons un autre exemple. Supposons que nous ayons un USER_AGENT à
bloquer dont la totalité de la chaîne est :
Mozilla/v.01/ Indy Library-v.5 compatible I.E 5.5-NET. On ne va pas
écrire pour chaque USER_AGENT la totalité de la chaîne. On prendra simplement son nom
générique Indy Library. Si on écrit :
^Indy\ Library$ nous ne le trouverons
pas (il ne doit y avoir que ce nom seulement dans la chaîne)
^Indy\ Library nous le trouverons (Indy
Library-v.5 compatible I.E 5.5-NET commence par le nom recherché)
Indy\ Library nous le trouverons (Mozilla/v.01/
Indy Library-v.5 compatible I.E 5.5-NET contient le nom recherché)
^.*Indy\ Library$ nous le trouverons
(Mozilla/v.01/ Indy Library fini par le nom recherché)
^.*Indy\ Library.* nous le trouverons (Mozilla/v.01/ Indy
Library-v.5 compatible I.E 5.5-NET contient le nom recherché)
^.*Indy\ Library.*$ nous le trouverons(Mozilla/v.01/ Indy
Library-v.5 compatible I.E 5.5-NET contient le nom recherché)
.*Indy\ Library$ nous le trouverons(Mozilla/v.01/
Indy Library fini par le nom recherché)
.*Indy\ Library.* nous le
trouverons(Mozilla/v.01/ Indy Library-v.5 compatible I.E 5.5-NET contient le nom
recherché)
^.*Indy\ Library.* nous le trouverons(Mozilla/v.01/ Indy
Library-v.5 compatible I.E 5.5-NET contient le nom recherché)
^Mozilla/.* Indy\ Library- nous le
trouverons(Mozilla/v.01/ Indy Library-v.5 compatible I.E 5.5-NET) mais dans une autre
version le "-" peut être changé en "/" (ne pas s'encombrer de signes
inutiles)
^Mozilla/.* Indy\ Library* on le trouvera mais ce test est
inutile car il demande de rechercher ^Mozilla/.* Indy\ Librar suivit par
un ou plusieurs y
Donc, si on connaît exactement le nom du USER_AGENT et qu'il soit assez
court, on écrira de préférence :
^nom$ et nom
(sans balises) si on ne connait pas la chaîne totale.
. n'importe quel caractère après.
.* zéro ou plus de caractères
quelconques avant ou après la chaîne à vérifier.
* commence ou fini par le caractère juste avant
*.
^x$ - teste si "x" est égal à x
x$ - recherche tout finissant par "x" - equivalant
à ^.*x$
^x - recherche tout commençant par "x" - equivalant
à ^x.*$
\ annonce un espace juste après (nom
de l'agent) ou un caractèr spécial comme .
(point) ; (point virgule) -
(tiret) espace etc
L veut dire Last (terminé) et indique la fin de tous les
tests pour ce bloc de redirection.
# indique une remarque. Les caractères
qui suivent ce signe ne sont pas pris en compte.
OR "ou". Cet agent "ou" le suivant. N'est donc
pas nécessaire à la dernière ligne de RewriteCond
R Force la redirection. A employer si RewriteRule mêne vers
l'extérieur du site ou vers son propre site par http://
Exemple :
RewriteRule .* http://www.mon_domaine.com/page_perso_erreur.html [R,L]
RewriteRule .* http://www.autre_domaine.com/page_perso_erreur.html [R,L]
R retourne aussi un code d'erreur par défaut. La valeur est
spécifié par la règle.
Vous pouvez aussi forcer cette écriture avec " =
" plus " numéro de l'erreur " comprise entre 300 et 400. Ainsi,
si la condition normale de R est le renvoi d'un code 303, en mettant [R=302]
ce sera un compte rendu 302 qui sera renvoyé au serveur. Bien sûr, vous ne mettrez pas
n'importe quoi, non pas que le serveur "crasherait", mais vos statistiques en
seraient erronées.
! (not) pas. Exemple : !^http://www.mondomaine\.com.
C'est à dire, mondomaine.com n'est pas concerné par la règle.
- Si vous avez plusieurs applications à interdire commençant par NET,
par exemple, vous pouvez les écrire sur une seule ligne :
RewriteCond %{HTTP_USER_AGENT}
net.?(ants|mechanic|spider|vampire|zip) [NC,OR]
Ainsi, toutes les applications comme NetAnts, NetMechanic,
NetSpider, Net Vampire et NetZIP seront
bloquées.
BLOCAGE PAR L'ADRESSE IP
- Vous pouvez bloquer une adresse IP en particulier par RewriteCond
%{REMOTE_ADDR} ^0\.0\.0\.0$ dans lequel chaque 0 correspond à l'un des 4
groupes d'une adresse IP.Exemple : vous voulez bloquer l'adresse 212.5.80.147
vous écrirez RewriteCond %{REMOTE_ADDR} ^212\.5\.80\.147$.
Vous pouvez aussi écrire :
^212\.5\.80\. bloque 212.5.80.0 à
255
^212\.5\. bloque 212.5. 0 à 255 et
0 à 255
Attention de ne bloquer que les adresses fixes comme celles attibuées aux abonnés
du câble ou de l'ADSL. Les autres abonnés se voient attibués une adresse différente à
chaque connection.
BLOCAGE PAR LE NOM DE L'HOTE
- Vous pouvez aussi interdire un nom d'hôte particulier
RewriteCond %{REMOTE_HOST} ^.*freewebi-gw-01-213245068033\.webnet\.com.*$ [NC,OR]
BLOCAGE PAR LE NOM DE DOMAINE
RewriteCond %{REMOTE_REFERER} ^http://www\.freewebi\.com/.*$ [OR]
Evitez cette interdiction car dans ce cas, vous allez avoir un ralentissement général de votre site. Cette fonction de recherche est la plus lente.
Dans tous les cas, vous pouvez effectuer plusieurs redirection dans un même fichier .htaccess. Cependant, il est conseillé d'utiliser la fonction de fermeture pour bien séparer les fonctions et pour ne pas avoir à effecteur de nombreux coller/effacer lors des test d'une des conditions.
RewriteEngine on
un code actif
RewriteEngine off
un code suspendu ou en test
RewriteEngine on
un autre code actif
- Même si votre fichier .htaccess devient volumineux le temps d'accès (à chaque requête) est vraiment négligeable. Essayez de ne pas dépasser 40/50 ko
- Pour plus de renseignements sur les fonctions mod_Rewrite, consulter le site APACHE http://www.apache.org/
Pour ceux qui n'ont pas accés aux couple RewriteCond/RewriteRule dans .htaccess, utilisez :
| SetEnvIf
User-Agent "eCatch" ban=1 SetEnvIf User-Agent "EmailCollector" ban=1 SetEnvIfNoCase User-Agent "frontpage" ban=1 <Files ~ "^.*$"> order allow,deny allow from all deny from env=ban </Files> |
SetEnvIfNoCase indique que le USER_AGENT possède des minuscules et
des majuscules.
Si vous avez des lignes telles que ErrorDocument 404
/404.php et/ou ErrorDocument 401 /401.php
etc, placez les après ou avant RewriteRule ^.*$
http://www.autre_site.com [L,R], des essais devant être faits suivant la
configuration de votre hébergeur.
| Page d'erreur 403 |
Pour plus d'information sur les applications indésirables qui tentent de spammer votre
site principal, il sera avantageux qu'un mail vous prévienne d'une tentative d'intrusion.
En outre, une page d'erreur 403 sera affichée à l'intrus.
Il sera préférable que la page d'erreur 403 se trouve sur un autre site que le vôtre
(cela fera des hits en moins), par exemple, chez un hébergeur gratuit où vous aurez mis
un site miroir, les hébergeurs gratuits ayant horreur des sites garage.
Dans le fichier .htaccess de votre site principal, la dernière ligne s'écrira :
RewriteRule ^.*$ http://hebergeur_gratuit.com/erreur403.php [R,L]
La page erreur403.php sur votre site secondaire (hébergeur gratuit) :
Remarque
:
- Remplacez $to="votre_mail@votre_domaine.com";
par votre mail du site principal ou un mail gratuit.
- Remplacez "From: erreur403@hebergeur_gratuit.fr");
par le mail de votre site secondaire (hébergeur gratuit). Chez certains
hébergeur gratuits, l'extension après @ doit être son nom de domaine. Le préfixe erreur403
peut être laissé tel quel.
- Remplacez <a
href=\"http://www.votre_domaine.com/formulaire.htm\"> par le
formulaire de contact pour les visiteurs se trouvant sur votre site principal.
| Piéger les nouvelles applications indésirables |
De nouveaux sites ou de nouveaux aspirateurs apparaissent tous les mois. Il faudra donc
actualiser votre liste des indésirables.
Afin de piéger les aspirateurs de sites que vous ne connaissez pas encore, vous allez les
mener vers une page inexistante pour vous signaler leur passage par une erreur 404 et
l'envoi d'un mail comportant leurs caractéristiques.
Page 1 : choisissez une page peu visitée. Etablissez un lien comme <a href="nolink.htm">No_link</a> à mettre dans un coin ou en fond de page en petits caractères
Page 2 : nolink.htm devra comporter au minimum la balise <meta NAME="Robots" CONTENT="noindex, nofollow"> afin que cette page ne soit pas prise en compte par les "bons" spiders des moteurs de recherche et leur interdire, en outre, de suivre le lien contenu dans cette page. Vous devrez, aussi interdire la visite de cette page par les "bons" crawlers dans le fichier robots.txt se trouvant à la racine de votre site. Les spiders des moteurs de recherche et d'indexation ne visiteront pas, en principe, la page nolink.htm. Ainsi, vous ne serez pas pénalisé car le nombre de liens brisés est pris en compte dans la note pour le classement de votre site par les moteurs de recherche. Les crawlers douteux ainsi que les aspirateurs de sites ne respectant pas ce protocole seront, par contre, piégés et reconnus. Vous pourrez alors les ajouter à la liste des indésirables dans le fichier .htaccess.
Copiez ci-dessous, la page complète nolink.htm : l'enregistrer à la racine du site.
Le lien de cette page ne mène nulle part : il provoquera une erreur 404.
Vous devrez installer une page d'erreur 404
personnalisée qui vous préviendra par mail de la visite d'un aspirateur de
site.
Interdire les aspirateurs - Liste des aspirateurs - Code pour .htaccess - Réduire le nombre de hits -
Copyright www.toulouse-renaissance.net ©