相信大家都知道防盗链的重要性吧,在这里就不多说了,今天说一下用.htaccess文件做防盗链的方法及其原理

http标准协议中有专门的字段记录referer

一来可以追溯上一个入站地址是什么

二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。

因此所有防盗链方法都是基于这个Referer字段

以下只讲HTACCESS方法

统一在网站根目录下的.htaccess设置,虽然理论上而言,在Apache中,可以针对每个目录分别设置.htaccess,通过许可权的继承与覆盖可以实现相当复杂的功能,不过,过多的.htaccess往往会增加管理的难度,修改.htaccess稍有遗漏就可能造成网站出现问题。

默认情况想禁止其它网站盗链,对图片而言,当其他网站使用

<img src=”http://yourdomain.com/someimg”>

盗链时,会自动重定向,当然,从降低对服务器带宽占用的角度考虑,你可以简单地拒绝其访问,让其网页上图片位置以红”X”号代替。

允许特定访问来源:单纯针对图片来说,我们也不可能禁止所有除你自己网站之外的其他访问,比如说Google,如果你希望通过Google图片搜索获得一定的访问的话,必须让其能够正确读取真正的图片,再如应能够让RSS订阅用户看feed中的图片。

运行特定目录下的文件被外部网站使用:完全禁止外部网站有时会带来不便,很大时候,我们自己也可能需要在外部网站使用部分文件,当然,放入这些目录的文件要有一定的限制,不然,便失去设置防盗链的意义了。
设置.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} !google\.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]

设置允许访问的HTTP来源,包括Google等,
RewriteRule (.*) /allow1/leech.gif [R,NC,L]

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

其它类型文件的防盗链设定,如果你您的网站上存在其它较大的文件,如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文件、压缩文件盗链的设置与此类似,不再赘述。

下面开始详细讲解,比如你的图片都在img目录下,那就在该目录下放一个名为 .htaccess 的文件,内容如下:

RewriteEngine on
 
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !chong4.com.cn [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
 
RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]
 
RewriteRule ^(.*)$ http:\/\/image.chong4.com.cn\/image\/$1 [L]

大概解释一下:

 
 
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !chong4.com.cn [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]

这部分是判断是否盗链,如果以上条件都成立(即访问图片的请求,既不是直接输入网址,也不是来自chong4.com.cn,也不是来自zhuaxia.com,也不是来自google.com,也不是来自baidu.com,也不是来自bloglines.com 的话),就执行下列转向:

 
RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]

意思是让所有盗链 img 目录下 jpg、gif、png、bmp、swf、jpeg 文件的网页,显示的图片都用 image 目录下的 replace.gif 图片替换掉。注意替换显示的图片不要放在设置防盗链的 img 目录下。
如果照上面的规则判断出图片请求不是盗链的,就执行以下转向:

 
RewriteRule ^(.*)$ http:\/\/image.chong4.com.cn\/image\/$1 [L]

意思对 img 目录下所有的请求都转向到目标服务器,比如有个图片原来的 url 是 http://www.chong4.com.cn/img/girl.jpg ,现在就会转到 http://image.chong4.com.cn/image/girl.jpg 去。当然了你得先把原服务器 img 目录下的文件统统拷贝到临时服务器的 image 目录下,转向才会真正可用。起到的效果就是把原服务器图片下载所占用的流量统统省下,让临时服务器来承受了。

目前于都在线已经全部做好了防盗链处理。

未经允许请勿转载于都人博客的文章。

标签: , ,

留下回复

你可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">