web-dev-qa-db-fra.com

Comment empêcher le hotlinking pour des domaines spécifiques en utilisant .htaccess?

Je suis fortement spammé par les sites de grattage d'image. Il existe plus de 150+ domaines ciblant mes images et envoyant des liens spammés vers mon site. Je veux juste empêcher leur hotlinking. Je veux juste bloquer uniquement ces sites spécifiques.

Existe-t-il une règle htaccess pour empêcher le hotlinking dans des sites spécifiques uniquement et autoriser d'autres qui ne sont pas inclus dans la liste?

3
Ankit Jha

En utilisant https://www.htaccesstools.com/hotlink-protection/

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Vous pouvez ou non avoir besoin de RewriteEngine on. La ligne suivante permet un référent vide. Vous devrez peut-être examiner vos fichiers journaux et éventuellement supprimer cette ligne.

Les deux dernières lignes sont la chair du code. Remplacez example.com par votre nom de domaine. De plus, si vous souhaitez ajouter ou supprimer plus de types d'images, vous pouvez simplement les ajouter ou les supprimer. S'il vous plaît pas le | est un caractère or. Vous en avez besoin dans votre liste comme vous les voyez. Dans ce cas, jpg ou jpeg ou png ou gif.

Vous pouvez certainement utiliser le lien ci-dessus pour le faire pour vous.

4
closetnoc

Il existe plus de 150+ domaines ciblant mes images et envoyant des liens spammés vers mon site. Je veux juste empêcher leur hotlinking. Je veux juste bloquer uniquement ces sites spécifiques.

"150" est un peu excessif à bloquer spécifiquement et cela peut devenir difficile à maintenir à l'avenir. Il serait plus courant de bloquer tous les sites de hotlinking comme dans réponse de @ closetnoc , et juste autoriser des référents spécifiques comme requis.

Cependant, pour répondre à votre question, si vous souhaitez bloquer uniquement ces référents spécifiques, vous aurez besoin de quelque chose comme ce qui suit.

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^https?://referer-1\.example/ [OR]
RewriteCond %{HTTP_REFERER} ^https?://referer-2\.example/ [OR]
# etc...
RewriteCond %{HTTP_REFERER} ^https?://referer-150\.example/
RewriteRule \.(jpe?g|png|gif)$ - [NC,F]

Cela devrait aller en haut de votre .htaccess fichier.

Il ne devrait pas y avoir d'indicateur OR sur la dernière condition, sinon tout le trafic sera bloqué.

L'indicateur L n'est pas requis sur la directive RewriteRule lors de l'utilisation de l'indicateur F, il est implicite.

MISE À JOUR: Pour rendre ce qui précède plus efficace, vous devez tout d'abord inclure les conditions qui vérifient que le référent est pas le nom d'hôte attendu (et éventuellement pas vide) - comme dans la réponse de @ closetnoc - de sorte que la règle échoue tôt pour 99,9% des demandes.

Par exemple:

RewriteEngine On

# Fail early for all "direct" and "internal" requests
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example\.com

# Block specific Referers...
RewriteCond %{HTTP_REFERER} ^https?://referer-1\.example/ [OR]
RewriteCond %{HTTP_REFERER} ^https?://referer-2\.example/ [OR]
# etc...
RewriteCond %{HTTP_REFERER} ^https?://referer-150\.example/
RewriteRule \.(jpe?g|png|gif)$ - [NC,F]
2
MrWhite