先解释一下什么叫盗链:比如,别人上传的东西,你直接拿了LINK去,贴到别的论坛或者网站,宣称"有好东西,快来下载",又或者告诉你的朋友"你要这个文件?俺有连接,快下",然后将用户导向自己的没有任何内容的网站。
“盗链”的定义是:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
为什么会产生盗链?
一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器回将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
如何防止盗链?普遍网站用的是IIS和Apache,那么针对这两种服务器可进行如下配置防止盗链:
一、IIS设置方法:运用软件ISAPI_rewrite来设置
在httpd.ini加上如下代码:
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://(?:51group\.com|www\.51group\.com|www\.google\.com|cache\.baidu\.com)).+
RewriteRule .*\.(?:jpg|gif|mp3|wmv|rmvb|rm) /block.gif [I,O]
说明,第1行后面的网站列代表你允许盗链的网站,我这里设置有:51group.com,www.51group.com,www.google.com ,cache.baidu.com,第3行设置你需要防止盗链的文件,我这里设置有jpg,gif,mp3,wmv,rmvb,rm文件,遇到盗链直接替换成根目录下的block.gif图片
二、Apache设置(直接配置Apche)
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?niernier\.com/.*$ [NC]
RewriteRule \.(mp3|rar)$ http://www.niernier.com/archives/000445.html [R=301,L]
#RewriteLog "logs/rewrite.log"
#RewriteLogLevel 3
RewriteCond 条件:意思就是所有的mp3和rar访问如果referer不是本网站niernier.com或www.niernier.com,
RewriteRule 规则:自动转向到原作宿主页: http://www.niernier.com/archives/000445.html
注释掉的部分是测试rewrite engine用的:对于调试mod_rewrite很有用。
关于Apceh防盗链,更详细请参阅车东[Blog^2]
此外还可以通过写程序的方法来防止,判断web request头,不过那方法太笨了,不建议使用。