Blog安装、优化及创收技巧

Apache下防止图片盗链(完整篇)

2007/04/9 | BlogsDiy · 14 回复

禁止文件盗链这篇文章与博客学堂讨论的话题有一段距离,也曾犹豫过是否应该将它发布在这个网站,不过,另一个角度,除了在BSP上搭建的博客外,大部分租用主机建设的博客也许都会遇到盗链的问题,包括图片盗链、音乐或视频文件(如mp3、Flash等)盗链,也算是与博客网站建设有一定的关系

相信很多朋友都曾遇到过网站内文件特别是图片被盗链的情况。所谓盗链,是指对方网站直接链接您网站上的文件,而不是将其置于自己的服务器上,一般而言,盗链的对象大多为较耗带宽的大体积文件,如图片、视频等,从某种意义上说,这事实上造成了让您为其访问流量买单:不仅您的服务器带宽被无任何回报地占用,而且,往往会在很大程序上影响您网站的访问速度。

当然,从严格的道德与法律角度讲,对方网站就算不盗链,就算将文件拷贝到其自己的服务器使用,也应首先征得您的许可。不过,在Internet世界里破坏规则往往是不必付出代价的,这也使得许多人习惯了在网站建设中使用别人的内容与资源,源网站自身对此是无能为力的。这方面中文网站更是位于“世界领先”的地位,在中华传统“文化”的熏陶与教育大跃进的共同作用下,与鬼子们对抄袭、盗链大都还遮遮掩掩相比,中文网站往往非但不以为忤反而理直气壮,“窃书不算偷”甚至“窃你的书是看得起你”之类的说辞甚至成为主流。去年笔者就曾遇到过一位“极品男”,因我的某个网站图片被盗链严重,服务器带宽被大量占用,而不得不采用最原始的防盗链手段——那个网站因使用IIS,而且未安装Mod_rewite功能扩展模块——即改变图片文件存储目录与文件名的方式,结果却收到某个盗链网站的抗议,义正辞严地指责我那么做是如何如何地不道德,给他带来了多大的麻烦:他不得不逐个修改每个网页以让图片能够正确显示,并谆谆教导我保持图片url恒定不变才显得更为专业等,让人啼笑皆非。

虽然这类人中龙风不太常见,但是,对于原创网站而言,在网站建设的最初阶段便“断绝”与其往来,一开始便禁止其盗链也许是更佳的选择,当然,也可以为极品男省去很多麻烦。

防止文件盗链目标与要求

盗链警告下面首先将我们欲实现的目标介绍一下:

  • 统一在网站根目录下的 .htaccess 设置:虽然理论上而言,在Apache中,可以针对每个目录分别设置 .htaccess ,通过权限的继承与覆盖可以实现相当复杂的功能。不过,过多的 .htaccess 往往会增加管理的难度,有时候百密难免有一疏,修改 .htaccess 稍有遗漏便可能造成网站出现问题。
  • 默认情况下禁止其他网站盗链:对图片文件而言,当其他网站使用 <img src=’http://yoursite.com/someimg’> 盗链时自动重定向至类似右图所示的图片,声明版权及宣传您的网站。当然,从降低对服务器带宽占用的角度考虑,这个图片文件不能过大,您也可以简单地拒绝其访问,让其网页上图片位置以红“x”号代替。
  • 允许特定访问来源:单纯针对图片文件来说,事实上也不可能禁止所有除您自身网站之外的其他访问,比如说Google,如果您希望通过Google图片搜索获得一定访问的话,必须让其能够正确读取真正的图片文件,再如应能够让RSS订阅用户看到feed中的图片,这就要求允许来自bloglines等的访问。
  • 允许特定目录下的文件被外部网站使用:完全禁止外部网站有时会带来不便,很多时候,我们自己也可能需要在外部网站使用部分文件。当然,放入这些目录的文件要有一定限制,不然,便失去设置防盗链的意义了。

设置 .htaccess 禁止图片盗链

下面即为博客学堂禁止图片盗链的 .htaccess 设置部分:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(allow1|allow2)
RewriteRule ^.*$ - [L]

首先,设置允许可“盗链”即外部网站可以使用的文件所处目录,上面我们设置了两个目录,分别为allow1与allow2,当然,如果您只有一个目录的话,可以将其改为:

RewriteCond %{REQUEST_URI} ^/allow1

接下来判断是否为图片文件:

RewriteCond %{REQUEST_FILENAME} \.(gif|jpeg|png)$ [NC]

您也可以根据自己的需要设置更多的文件类型。

RewriteCond %{HTTP_REFERER} !^$

上面这一行意在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。

RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC]
RewriteCond %{HTTP_REFERER} !google\.com [NC]
RewriteCond %{HTTP_REFERER} !baidu\.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]

设置允许访问的HTTP来源,包括博客学堂自身、Google、Baidu、Bloglines、Feedburner等。

RewriteRule (.*) /allow1/leech.gif [R,NC,L]

将不满足上述条件的访问重定向至leech.gif。您可能已经注意到,leech.gif位于允许“盗链”的目录allow1下,这一点很重要,不然,您的警告信息图片将无法在对方网站上显示。

如此,即实现了我们预先设定的防止图片盗链目标。

其他类型文件的防盗链设定

如果您的网站上存在其他类似体积较大较耗费带宽的文件如flash、mp3被其他网站盗链,可以同样采取上述策略,比如说,对Flash文件,可用类似如下的设置:

RewriteCond %{REQUEST_URI} ^/allow1
RewriteRule ^.*$ - [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} \.swf$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC]
(……其他允许访问来源)
RewriteRule (.*) /allow1/leech.swf [R,NC,L]

当然,需要事先创建一个声明版权信息的flash文件“leech.swf”。其他诸如防止mp3文件、压缩文件(zip或rar)盗链的设置与此类似,不再赘述。

参考文献:使用.htaccess防止图片盗链

→ 版权声明分类: Web服务器技巧

  • 欢迎订阅博客学堂RSS Feeds

当前共计14 回复 ↓

  • 1 xiaoxiao | 2007/04/18 3:15 pm

    MyAvatars 0.2

    看不懂里面的代码。

  • 2 英语 | 2007/06/7 12:39 am

    MyAvatars 0.2

    我也看不懂,唉,不懂得技术

  • 3 美文欣赏 | 2007/12/17 4:15 pm

    MyAvatars 0.2

    是不是跟百度空间的防盗链一样啊…

  • 4 trail | 2008/01/5 6:31 pm

    MyAvatars 0.2

    看不懂!

    不过,很感兴趣!

    很有用的

  • 5 test | 2008/01/12 9:42 pm

    MyAvatars 0.2
  • 6 QQ164899871 | 2008/02/26 12:50 pm

    MyAvatars 0.2

    你好啊,我也看不动,好象是这个对一些大型的网站而说的,我们这样的小型网站怎么能实现图片防盗连接呢?我用的是ASP,网站系统,你们说的那样的东西我想是都是服务器管理员调的,可是我们买空间的时候没有办法条这些,能不能用代码实现防盗连接的方法呢?

  • 7 jim | 2008/03/26 1:35 pm

    MyAvatars 0.2

    原来看的人都不懂。

  • 8 vip256上网导航 | 2008/04/26 9:44 pm

    MyAvatars 0.2

    看不懂!

TrackBacks ↓

  1. 如果您访问本站时图形不能正确显示…… | Vista天地
  2. 《SEO探索》取消图片防盗链 | SEO探索
  3. 《SEO探索》取消图片防盗链 | jifrj
  4. 博客学堂2007精彩内容汇总 - 八宝饭
  5. 重剑无锋 » Blog Archive » 转载:博客创建、优化教程全系列
  6. 转载:博客创建、优化教程全系列 | 重剑无锋

留下您的评论

[→ 留言须知]