发布时间:2014-09-05 17:37:50作者:知识屋
相信很多朋友都曾遇到过网站内文件特别是图片被盗链的情况。所谓盗链,是指对方网站直接链接您网站上的文件,而不是将其置于自己的服务器上,一般而言,盗链的对象大多为较耗带宽的大体积文件,如图片、视频等,从某种意义上说,这事实上造成了让您为其访问流量买单:不仅您的服务器带宽被无任何回报地占用,而且,往往会在很大程序上影响您网站的访问速度。
当然,从严格的道德与法律角度讲,对方网站就算不盗链,就算将文件拷贝到其自己的服务器使用,也应首先征得您的许可。不过,在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)盗链的设置与此类似,不再赘述。
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能