Apache 使用 mod_rewrite 防止热链接或图像窃取
问:我的网站托管着许多好图片,其他网站也从他们自己的网站热链接到我的图片。热链接占用了我大量的带宽。我该如何阻止 Apache Web 服务器下的“色狼”或防止热链接?
答:您可能会遇到这个问题,特别是当您的网站托管独特的图像时。不过,解决方案很简单:使用 Apache mod_rewrite 检查浏览器提供的引荐信息,从而禁止图像热链接。
如何防止 Apache 热链接图像/媒体?
阻止图像热链接的方法有很多种。
您可以将以下任意一个代码添加到.htaccess 文件或您自己的 httpd.conf 文件中以防止。
确保 Apache mod_rewrite 已启用。
解决方案 #1:防止图像“热链接”
使用 vi 文本编辑器打开 httpd.conf 或 .htaccess 文件
# vi httpd.conf
附加以下配置指令:
SetEnvIfNoCase Referer "^http://www\.example\.biz/" banimages=1 SetEnvIfNoCase Referer "^http://example\.biz/" banimages=1 SetEnvIfNoCase Referer "^$" banimages=1 <FilesMatch "\.(gif|png|jpe?g)$"> Order Allow,Deny Allow from env=banimages=1 </FilesMatch>
或者您可以使用以下简单代码:
RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$ [NC] RewriteRule ^.*\.(bmp|tif|gif|jpg|jpeg|jpe|png)$ - [F]
解决方案 # 2:防止图片“热链接”并重定向到新图片
此方法停止热链接并向最终用户显示替代图像
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.biz/.*$ [NC] RewriteRule .*\.(gif|jpe?g|png)$ http://www.example.com/noop.jpg [R,NC,L]
除非图片显示在 example.com 上,否则浏览器将看到图片 noop.jpg。替换域名 example.com 并将 noop.jpg 上传到 webroot。
如果您对 httpd.conf 文件进行了更改,请重新启动 Apache:
# /etc/init.d/httpd restart