我想阻止网站上 PDF 文件的盗链。以前,我曾使用此方法阻止另一台服务器上 zip 文件的盗链。这是我的 .htaccess:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mysite.com/.*$ [NC]
RewriteRule \.(pdf)$ - [F,NC]
它的代码与我使用的另一个网站几乎相同,只是我用“zip”代替了“pdf”。出于某种原因,在这个 Apache 服务器上,它不仅阻止了 pdf,还阻止了所有内容。通过浏览器访问的 PHP 和 HTML 文件都给出了禁止错误。有人能看出我在这个块中遗漏了什么吗?或者知道是什么原因造成的?
答案1
诊断:如果您设置.htaccess
仅包含会发生什么情况RewriteEngine on
?我们正在检查是否有人留下古怪的服务器定义规则,依靠RewriteEngine
关闭来禁用它们。
评论表明情况确实如此。太棒了。我能想到的唯一建议就是尝试不使用 的解决方案mod_rewrite
,例如:
SetEnvIf Referer . hotlink=1
SetEnvIfNoCase Referer ^http://(www\.)?domain\.com/.*$ !hotlink
<LocationMatch *.pdf>
Order allow,deny
Deny from env=hotlink
Allow from all
</LocationMatch>
答案2
尝试:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/.*$ [NC]
RewriteRule .*\.pdf$ - [F,L]
答案3
尝试一下,在我的服务器上运行良好:
#Enables mod_rewrite, otherwise all Rewrite directives below will not work
RewriteEngine on
#Hotlink protection
RewriteCond %{HTTP_REFERER} !^http://mysite.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://mysite.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.mysite.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.mysite.com$ [NC]
RewriteRule .*\.(pdf|zip)$ - [F,NC]