1

使用 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>

这是防止盗链的适当且安全的解决方案吗?

4

1 回答 1

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:)。看看这里,看看它是如何工作的。

于 2013-08-14T15:26:35.417 回答