Exemple
: prévenir le "hot linking" de fichier.
Certains internautes volent sans le savoir la bande passante que
payent les webmasters, en utilisant les images d'un site sur un
autre site via le lien absolu, c'est à dire en allant directement
chercher l'image sur le site d'origine plutôt que de le stocker
sur son propre site. Certains hébergeurs gratuits ont mis
en place une parade affichant en lieu et place de l'image liée,
une publicité pour le site. Nous vous expliquons ici comment
interdire simplement "l'export" de vos images, et comment
intervertir l'image volée par une autre choisie.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.site.com/.*$ [NC]
RewriteRule .*\.(gif|jpe?g?|png)$ - [NC,F]
Renvoyer vers
une image précise n'est guère plus compliqué
:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.site.com/.*$ [NC]
RewriteRule .*\.(gif|jpe?g?|png)$ /pub.gif [NC]
Expliquons pas
à pas...
RewriteEngine on met donc en route
notre moteur de réécriture. Suivent deux conditions
de réécriture RewriteCond
: si la chaîne HTTP_REFERER
n'est pas vide (le visiteur peut venir directement voir l'image,
ou être derrière un proxy), et si elle contient autre
chose que la racine de votre site (donc, si la requête est
envoyée depuis un autre site). Tout ceci est déterminé
à l'aide des expressions rationnelles :
! marque la négation de ce
qui va suivre : !(jdnet) donne "ne
contient pas jdnet".
^ marque le début d'une chaîne
: ^net peut reconnaître "netissimo",
tandis que net seul peut reconnaître
"jdnetdev" .
.* : le point correspond à
"n'importe quel caractère, même vide", et
l'étoile signifie "le caractère précédant
autant de fois que possible". L'association des deux donne
donc "n'importe quelle chaîne de caractères, même
vide", et reconnaîtra autant index.php?id=7&rub=13
que default.aspx.
Le signe $ marque la fin d'une chaîne
: aucun caractère ne peut suivre celui-ci.
Le drapeau [NC], enfin, indique
qu'on ne doit pas prendre en compte la casse : ce motif est valable
autant pour "www.site.com" que "WWW.Site.Com".
Troisième
directive, RewriteRule précise
à quelle partie de la requête s'applique notre réécriture.
Nous faisons une fois de plus appel aux expressions rationnelles
pour que notre règle ne s'applique qu'aux requêtes
portant sur les fichiers GIF, JPG, JPE, JPEG ou PNG.
Nous retrouvons le couple .*, qui
indique que le fichier peut porter n'importe quel nom. Suit le couple
\. : on veut réellement tester
ici le point de l'extension de fichier, et non "n'importe quel
caractère". L'anti-slash ("\")
qui le précède permet donc d'annuler la "spécificité"
du point, et d'en faire un simple caractère plutôt
qu'un motif. Enfin, (xx|yy|zz) permet
de dire "xx OU yy OU zz", et le point d'interrogation
précise que le caractère qui le précède
est optionnel (les lecteurs attentifs noteront que nous incluons
donc les fichiers JP dans notre ensemble, ce qui ne saurait poser
problème).
Nous proposons donc deux substitutions. La première, -
, indique qu'il n'y a pas de réécriture... Mais nous
avons deux drapeaux : NC qui retire
le problème de casse, et surtout F
(pour forbidden) qui, finalement, interdit l'accès
aux fichiers reconnus. Ainsi, toute requête extérieure
sur ces fichiers se soldera par un "fichier cassé".
On pourrait aussi bien utiliser G,
pour gone...
La seconde substitution remplace donc tout appel vers une image,
n'importe laquelle, vers une image spécifique, pub.gif,
située à la racine du serveur.
Voici pour notre
première approche de mod_rewrite.
D'autres suivront dès la semaine prochaine.
>>
Discutez de cet article dans le
forum JDNet Développeurs
Page 1 | 2
|