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 -

Liens connexes qui vous serviront dans l'environnement du fichier .htaccess

Limiter le nombre de hits  -  Interdire les aspirateurs(1)  -  Interdire les aspirateurs (2)  -  Liste générale des applications et aspirateurs indésirable, écriture .htaccess  -   Ecriture du fichier .htaccess (et htpasswd)  -  Liste vérifiée des applications et aspirateurs indésirables  -  Autres applications vérifiées  -  .htaccess et liste vérifiée des applications indésirables   -  Info par mail d'une erreur 401,403,404,405  -  Page personnalisée d'erreur  -  Le fichier robots.txt  -  Ecriture et redirection avec htaccess  -  Mot de passe avec .htaccess et .htpasswd  -  Codez vos mots de passe  -  Interdire l'affichage de ses images  -  CHMOD  -  Les codes d'erreurs 

Retour page d'accueil

Copyright www.toulouse-renaissance.net ©