Que tal verificar se o Host corresponde ao referenciador? Por exemplo,
RewriteCond %{HTTP_REFERER} !%{HTTP_HOST}
Editar
Isso não funcionará, conforme indicado pelo OP. Para o Apache 2.4, você pode usar:
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
Para o 2.2, você poderia escrever um pequeno manipulador em mod_perl ou mod_python que poderia realizar a comparação e emitir o erro 403.
Para conseguir isso com o mod_python:
Crie um arquivo no seu docroot (no meu caso / var / www /) chamado hotlink.py
from mod_python import apache
def headerparserhandler(req):
if req.headers_in.get("Host") != req.headers_in.get("Referer"):
return apache.HTTP_FORBIDDEN
return apache.OK
Em sua configuração do Apache:
<Directory /var/www/>
...
AddHandler mod_python .jpg
AddHandler mod_python .gif
PythonHeaderParserHandler /var/www/hotlink.py
#PythonDebug On
</Directory>
Agora todos os pedidos de .jpg e .gif serão verificados pela primeira vez por hotlink.py. Com o mod_python, você também pode verificar o atributo req.server.server_hostname
para verificar com ServerName
em vez do cabeçalho do Host de entrada.