如何禁用我的网站上的热链接和直接链接?

如何禁用我的网站上的热链接和直接链接?

好吧,我已经绞尽脑汁想了几个小时,但还是不行。下面是我的 .htaccess 文件的内容。我想做的是阻止对我网站上的一组 pdf 和 mp3 文件的访问,除非用户通过我网站页面上的链接点击这些文件。

我查看过的所有地方的代码都与我使用的代码基本相同,但就是不起作用。我的问题是:

1) 我做错了什么吗? 2) 如果没有,我该如何调试它?

# BEGIN CustomRedirects
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(mp3|pdf)$ - [F,NC,L]
# END CustomRedirects

mp3 和 pdf 不区分大小写,并且启用了 mod_rewrite。我的网站上安装了 Wordpress,但它在树中的目录比此 .htaccess 文件高。从文档中我得到的印象是我的 .htaccess 文件应该优先,因为它位于我希望进行此重写的目录中。如果我把这个 .htaccess 文件搞得一团糟,就会出现错误 500,所以我只能假设它在某个时候被读取了。

我还尝试了以下步骤,这是我从另一个 serverfault 问题中找到的,但也不起作用:

SetEnvIf Referer . hotlink=1
SetEnvIfNoCase Referer ^http://(www\.)?mydomain\.com/.*$ !hotlink
<LocationMatch *.pdf>
      Order allow,deny
      Deny from env=hotlink
      Allow from all
</LocationMatch>

有人有主意吗?

更新: 我还尝试了以下 RewriteRule,但没有效果。

RewriteRule .*\.(mp3|pdf)$ - [F,NC,L]

我发现,如果我省略该RewriteCond %{HTTP_REFERER} !^$部分,它工作正常,但有人仍然可以直接输入 URL 并获取文件。这也是我想防止的事情。

答案1

第一个摘录的问题可能是 RewriteRule 行。

你有:

RewriteRule \.(mp3|pdf)$ - [F,NC,L]

也许你想要:

RewriteRule .*\.(mp3|pdf)$ - [F,NC,L]

照这样看来,我认为您匹配的是特定文件“.mp3”或“.pdf”。您想要匹配“foo.mp3”或“bar.pdf”(用于改变 foo 和 bar)。

在第二段摘录中,开头看起来有点可疑。我不知道为什么需要 SetEnvIf 和 SetEnvIfNoCase 组合。也许可以尝试以下方法:

SetEnvIf Referer "^http://(www\.)?mydomain.com/.*$" legit_referal
SetEnvIf Referer "^$" legit_referal
<LocationMatch "\.(pdf|mp3)$" >
   Order Deny,Allow
   Deny from all
   Allow from env=legit_referal
</LocationMatch>

答案2

您所描述的情况绝对是可能的。如果引荐来源与您自己的域名不匹配,您很容易返回 403 禁止状态。

您也可以考虑这个选项:http://www.alistapart.com/articles/hotlinking/

关于您当前的代码,我注意到您错误地错过了反斜杠 \ 来转义 .我的域名

相关内容