有独立主机的同志可以用以下这个办法:
根据Referer字段设定条件禁止访问,具体操作起来就是使用了apache的SetEnvIF来设定环境变量,然后通过访问控制来做禁止,如下代码就出来了:
SetEnvIf Referer “^https?:\/\/IP(\/|$)” prevent_hot_link
SetEnvIf Referer “^https?:\/\/域名(\/|$)” prevent_hot_link
SetEnvIf Referer “^$” prevent_hot_link
Order allow,deny
Allow from env=prevent_hot_link
除了设定的几个自己的域名,禁止所有Referer,因为只要是通过浏览器访问,Referer肯定是来自你访问的站点,而通过搜索引擎的访问,Referer自然是搜索引擎的页面。
加上这些条之后,发现日志里所有Referer有异的访问HTTP Response Code从200都变成403了,前者是成功返回,而后者是Fobbiden,成功。
虚拟主机对于.htaccess的支持和mod_rewrite的支持,使得可以通过URL Rewrite实现同样的功能,具体方法也很简单,就是在.htaccess中写入如下语句块
RewriteEngine On
RewriteCond %{HTTP_REFERER} mp3\.baidu\.com [NC,OR]
RewriteCond %{HTTP_REFERER} box\.zhangmen\.baidu\.com [NC,OR]
RewriteCond %{HTTP_REFERER} 220\.181\.27\.54 [NC,OR]
RewriteCond %{HTTP_REFERER} m\?ct=
RewriteRule .* - [F]
前面两句是禁止mp3.baidu.com和box.zhangmen.baidu.com(不知道这个域名是干什么用的,然而从日志来看这个域名爬走的流量一点不比mp3.baidu.com小)这两个域名Referer过来。
第三句是禁止这个IP的Referer,这个也是mp3.baidu.com的IP。
第四句是禁止Referer为类似“http://xxxx.com/m?ct=XXXXXX”这种形式,这是为了避免mp3.baidu.com以其他域名或IP过来爬,从我前几个月的日志来看,还是有不少IP是这样爬过来的,真不知道mp3.baidu.com的爬虫还有多少版本。
客户端如何做?