所谓盗链,是指对方网站直接链接您网站上的文件,而不是将其置于自己的服务器上,一般而言,盗链的对象大多为较耗带宽的大体积文件,如图片、视频等,从某种意义上说,这事实上造成了让您为其访问流量买单:不仅您的服务器带宽被无任何回报地占用,而且,往往会在很大程序上影响您网站的访问速度。
要设置防盗链,以图片为例,首先要开启apache支持:
一:启用rewrite
# LoadModule rewrite_module modules/mod_rewrite.so
去除前面的 #
LoadModule rewrite_module modules/mod_rewrite.so
如果启用.htaccess还需修改
AllowOverride None 修改为: AllowOverride All
建议:如果你对httpd.conf拥有修改权,直接写在httpd.conf中更好,更快。那样可以防止apache在工作目录的每个文件夹下查找.htaccess文件,这是apache的优化之一。
二:设置两个虚拟站点(可以指向同一目录)
我设置了www.work.com和www.ceshi.com指向同一个工作目录(如果不会的可以查看:http://hi.baidu.com/ycvsjl/item/3787f6f411be0008d99e7211)
然后设置一个静态测试页面index.html
<html> <body> <p>index</p> <img src="http://www.work.com/images/picture.jpg"> </body> </html>
然后在httpd.conf中或者.htaccess中添加
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !work.com [NC] RewriteRule .(jpg|jpeg|bmp|png) http://www.work.com/ceshi.bmp [R,NC,L]
1、RewriteEngine on
开启重写,固定写法
2、RewriteCond %{HTTP_REFERER} !^$
允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时
3、RewriteCond %{HTTP_REFERER} !work.com [NC]
设置允许访问的HTTP来源,包括我们的自身站点、Google、Baidu、Bloglines、Feedburner、feedsky等。比如:
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
4、RewriteRule .(jpg|jpeg|png|gif) http://www.work.com/ceshi.bmp [R,NC,L]
定义被盗链时替代的图片,让所有盗链 jpg、jpeg、png、gif 等图片的网页,显示ceshi.bmp文件(ceshi.bmp件体积越小越好,越小就越节省流量。)
特别注意:不建议同时禁止jpg|jpeg|png|gif|bmp这五种图片文件,比如你已经禁止了gif,但是却用了no.gif来替换盗链图片,这样肯定会出问题(我发现网上大部分文档都犯了这种错误,简直是误人子弟,搞得我调试了一下,特指出)。如果你想同时禁止所有类型,可以使用其它服务器上(未设置过防盗链)的图片来替换演示。
另外说明一下其中的 R、NC 和 L
R:强制外部重定向、NC 指的是不区分大小写、L 指明本次转向到此结束,后续的转向不受先前判断语句的影响。
还有:比如我们保护的是zip和rar格式的文件。那么只需要写成(gif|jpg|jpeg|bmp|png|zip|rar)就可以了,当有不被我们允许的域名下载zip和rar格式的文件的时候,页面将自动跳转到我们指定的地方去。
然后分别用www.work.com和www.ceshi.com访问index.html就会发现前者显示的是正确的图片,而后者显示的是ceshi.bmp了。当然也可以在别的工作目录下添加相同的index.html,然后访问得到的结果也是一样的:ceshi.bmp。
另:HTTP_REFERER与HTTP_HOST是两个不同的概念,请勿混淆。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98600.html