在根目录.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} !shuai.be [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.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} !shuai.be [NC]

(……其它允许访问来源)
RewriteRule (.*) /allow1/leech.swf [R,NC,L]

当然,需要事先先创建一个声明版权资讯的Flash文件“leech.swf”,其它防止mp3文件、压缩文件盗链的设置与此类似,不再赘述。

在图片目录.htaccess设置防盗链:

.htaccess文件将影响其所在的目录及其子目录,因此,如果我们要保护的内容(此处以防止图片盗链为例,即图片)位于网站内多个目录下,可以考虑将其放在根目录下;而如果图片有单独的子目录如“/images/”,则只需将其放置在该目录下(当然也可以放到根目录中)。

需要注意的是,如果通过FTP方式将创建好的.htaccess上传到服务器上,传输模式应为ASCII而非Binary。上传到服务器后,应将其属性通过 CHMOD修改为644 或“RW-R–R–”,这样,可以保证服务器能够使用同时无法通过浏览器修改,当然,.htaccess的可读属性也存在一定的风险:攻击者可通过它找出您要保护的对象或认证文件位置——解决办法是将认证文件.htpasswd放到网站根目录之外,这样,便无法通过网络找到它了。
使用.htaccess禁止盗链

通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单,通过在该文件中加入几句命令即可保护我们宝贵的带宽。例如shuai.be设置如下:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !shuai.be [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]

RewriteRule .*\.(gif|jpg)$ http://nobing.cn/no.png [R,NC,L]

简单的解释一下上述语句:

1、RewriteCond %{HTTP_REFERER} !^$ [NC]

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

2、RewriteCond %{HTTP_REFERER} !shuai.be [NC]

设置允许访问的HTTP来源,包括我们的站点自身、Google、Baidu等。

3、RewriteRule .*\.(gif|jpg|png)$ http://nobing.cn/no.png [R,NC,L]

定义被盗链时替代的图片,让所有盗链 jpg、gif、png 等文件的网页,显示根目录下的 no.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。当然你也可以不设置替换图片,而是使用下面的语句即可:

RewriteRule .*\.(gif|jpg|png)$ – [F]

4、说明一下其中的R、NC 和 L

R 就是转向的意思

NC 指的是不区分大小写

L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

5、防止盗链的文件类型

上例中是 gif、jpg、png,而根据需要,可更改或添加其他文件类型,如rar、mov等,不同文件扩展名间使用“|”分割。

这样的话,就可以基本做到简单的防止被盗链情况的发生,而且可以尽最大可能的减少服务器流量的无畏消耗。