Eu tenho uma solução, mesmo que não seja muito bonita, porque ela deixa o documento do erro padrão 403 alterado mesmo que a imagem não esteja com hotlink:
Isso vai para o apache2.conf:
SetEnvIfNoCase Referer "livejournal.com" hotlink
<FilesMatch ".(gif|jpg|jpeg|png)$">
ErrorDocument 403 /server404/no_hotlink.php
</FilesMatch>
<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi|flv)$">
deny from env=hotlink
</FilesMatch>
Alias /server404 "/var/www/_404"
<Directory "/var/www/_404">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
Usamos o caminho / server404 para um documento de erro 404 em todo o servidor por algum tempo, então já tivemos isso. Você também pode chamá-lo 403 ou GlobalNoHotlink ou o que você quiser.
Para imagens (primeiro FilesMatch), definimos o ErrorDocument "proibido" para um arquivo PHP em nosso diretório / server404. Em seguida, verificamos se ele é hotlinked (também fazemos isso para arquivos de vídeo, portanto, duas tags FilesMatch) e proibimos o acesso se hotlinked.
Isso entra em /var/www/_404/no_hotlink.php - o arquivo PHP chamado imagem proibida:
<?PHP
$file = dirname(__FILE__) . '/_default/no_hotlink.png';
header('HTTP/1.1 200 OK', true, 200);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header('Content-length: ' . filesize($file));
header('Content-type: image/png');
readfile($file);
?>
- A primeira linha é usada para identificar o arquivo de imagem que queremos enviar.
- Em seguida, definimos o cabeçalho HTTP para 200 (isso é opcional. Decida você mesmo)
- adicione alguns cabeçalhos para evitar o armazenamento em cache da imagem (não queremos que esse arquivo de pixel rosa de 8000x8000 apareça "do cache" em nosso site se a pessoa decidir ir ao nosso site, não é?)
- Tamanho do conteúdo de acordo com o tamanho do arquivo fictício e
- tipo MIME (talvez seja necessário alterar o último de não usar PNG).
- Depois, lemos o arquivo.
Funciona - mas não é tão bonito quanto eu gostaria de tê-lo, então ainda será feliz com outras soluções.