htaccess : Empécher des liens vers vos images
L'objectif est de vous protéger des petits malins qui établissent un lien vers vos images et qui consomment votre bande passante.
Pour cela, on utilise le module mod_rewrite d'Apache : il permet de réécrire une URL entrante en fonction de conditions exprimées dans le fichier htaccess. L'avantage de ce fichier, que l'on placera dans le répertoire à protéger, est qu'il protège aussi les sous-répertoires.
Voici une liste d'instructions à placer dans htaccess :
(je suppose que votre site s'appelle monsite.com)
RewriteEngine On #active le moteur de réécriture
# !^ = toute chaine qui ne commence pas par ...
RewriteCond %{HTTP_REFERER} !^http://monsite.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.monsite.com/.*$ [NC]
# la condition suivante concerne certaines extensions de fichiers
# toute URL externe au site, qui pointe vers un de ces fichiers se verra retourner une erreur 403
RewriteRule .*\.(gif|jpg|jpeg|bmp|png|swf|mp3|mp4|ogv|webm|avi|flv|wav|pdf|zip)$ - [N,F,L]
Il existe une variante : on retourne une autre image (toujours la même) en remplaçant - [N,F,L] par l'URL de cette image et en ajoutant [R,N,F,L] pour forcer la redirection.
IMPORTANT :
Assurez-vous que personne ne puisse lire votre fichier htaccess en mettant les instructions suivantes dans celui-ci :
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^\.htaccess$ - [F]
Signification des symboles :
C applique la règle suivante si la condition est vraie (Chain)
E=VAR:VAL définit une variable d'environnement
F renvoie HTTP 403 ( URL forbidden)
G renvoie HTTP 410 (URL gone) : utilisé pour indiquer que des pages n'existent plus.
L retourne au début de la règle avec l'URL courante (Last)
N Next ( recommence à partir de la première règle = continue )
NC non sensible à la casse (No Case)
NE empèche le préfixage avec un antislash des caractères spéciaux (No Escape)
NS saute la règle de réécriture s'il s'agit d'une requête interne (NoSubreq)
P force le mandatement (proxy)
PT passe la gestion à d'autres modules comme Alias, ScriptAlias, ... (passthrough)
QSA ajoute une chaine de requête
R force la redirection (redirect)
S=n saute les n conditions suivantes (skip)
T=MIME-type on force le fichier cible en type MIME
! contraire ( ex : !true => false )
^ début de ligne
$ fin de ligne
\. caractère point ( antislash obligatoire )
* n'importe quel caractère