我有这个代码在我的。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>