使用htaccess动态防止多个域的热链接图像

时间:2013-08-14 10:35:35

标签: image .htaccess dns hotlinking

使用htaccess防止热链接已有详细记录。但是,我想在不为每个域添加规则的情况下阻止多个域的热链接。

我的想法是将引荐来源与主机名相匹配,这对我来说似乎是一个很好的解决方案。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?%{HTTP_HOST}/.*$ [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
</IfModule>

这是防止热链接的正确而安全的解决方案吗?

1 个答案:

答案 0 :(得分:1)

当请求附带www.但推荐人没有时,这不起作用。这是因为你的规则会有效地尝试匹配以下无效的。

RewriteCond http://domain.com/index.php !^http://(www\.)?www\.domain\.com/.*$

正确的方法是使用以下内容:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?([^/]+)/.*$ [NC]
RewriteCond %2#%{HTTP_HOST} !^(.+)#(www\.)?\1$ [NC]
RewriteRule \.(bmp|gif|jpe?g|png|swf)$ - [F,L,NC]

这也会处理SSL(https:)。看看here,了解它的工作原理。