Htaccess防止热链接也防止外部链接



我有这个代码在我的。htaccess文件,以防止图像和pdf文件的热链接,但它也阻止正常的外部链接工作。我的htaccess文件:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?mywebsite.com/.*$ [NC]
RewriteRule .*.(gif|jpg|pdf|png)$ http://www.mywebsite.com/images/notallowed.jpe [NC,R,L]

问题是,一个合法的外部链接说一个pdf文件将导致替换图像而不是pdf文件出现。这是正常的还是我做错了什么?

我想试试…

RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^https?://(?:www.)?mywebsite.com(?:$|/) [NC] [OR]
# Repeat the next line as needed for each allowed site
RewriteCond %{HTTP_REFERER} !^https?://(?:www.)?allowedsite1.com(?:$|/) [NC] [OR]
RewriteCond %{HTTP_REFERER} !^https?://(?:www.)?allowedsite2.com(?:$|/) [NC]
RewriteRule ^(.*).(gif|jpg|pdf|png) http://www.mywebsite.com/images/notallowed.jpe [NC,R,L]

可能有点不方便手动添加每个允许的网站,但它应该给你一些控制…另一个可能的缺点是,例如,访问原始图像的人必须通过网站内的现有链接来访问。

示例:在浏览器中输入http://www.mywebsite.com/logo.png并尝试直接查看文件logo.png不会工作,但是如果您单击<a href="http://www.mywebsite.com/logo.png"><img src="http://www.mywebsite.com/logo.png" /></a>,您应该不会有查看相同文件的问题。

使用SetEnvIf代替:

SetEnvIf Referer ^http remote
<FilesMatch ".(png|gif|jpg|pdf)">
  order deny,allow
  deny from env=remote
  allow from all
</FilesMatch>

最新更新