Apache下开启图片防盗链功能

一般的个人blog,在写文章时,总会配以各种各样的图片,让文章更形象生动。不过,最近我的博客因为访问量上涨,导致流量也跟着涨了上来。虽然图片不是很多,但是一个月流量大概在15G~20G的范围。总的看来,是因为我的blog之前一直没加防盗链的原因,如果加上防盗链,估计流量会少30%左右。虽然偶用的是VPS,一个月几百G接近1TB的流量,肯定是不会超的。不过,细想一下,要是不设置防盗链,岂不是当了别人的免费图床?

所以,总结了一下,图片防盗链主要有两大方法:

第一个方法,是尽量给你的图片加上水印,这样就算别人盗了你的图片,至少原始出处还在,在这个垃圾采集站漫天飞的互联网时代,一定程度上能保护博主原创的权益。

第二个方法,就是通过Apache的Rewrite功能,来实现防盗链,也即别人的网页中引用了你的图片后,图片不会被显示,或者被重定向到另外的地方。

下面就说说Apache中简单的实现图片防盗链的方法:

首先,得确保你的Apache已经加载并启用了mod_rewrite模块,然后就可以通过.htaccess来实现了。

在你的blog存放图片的目录中,新建一个.htaccess文件,这个文件中设置的rewrite规则,就会应用到你的图片目录,及其子目录中。在.htaccess文件中加入如下内容:

1
2
3
4
5
6
7
RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://xiaozhou.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^https://xiaozhou.net/.*$ [NC]

RewriteRule .(gif|jpg|png|jpeg|bmp)$ https://xiaozhou.net/pics/404.jpg [R,NC]

第三到四行,是定义允许引用图片的网站地址,采用白名单的形式,把你允许引用你的图片的网站地址都统统加进去。

最后一行,是跳转地址,如果其他网站引用你的任何图片(包括gif,jpg,png,jpeg和bmp格式),都会跳转到后面指定的地址。比如,我这里就指定了一个404的图片。后面的参数NC,表示不区分大小写。

下面是后面各种参数的说明:

1) R=code 强制外部重定向 强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。 2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。 3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。 4) P(force proxy) 强制使用代理转发。 5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。 6) N(next round) 重新从第一条规则开始运行重写过程。 7) C(chained with next rule) 与下一条规则关联 如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。 8)T=MIME-type(force MIME type) 强制MIME类型 9) NS (used only if no internal sub-request) 只用于不是内部子请求 10) NC(no case) 不区分大小写 11) QSA(query string append) 追加请求字符串 12) NE(no URI escaping of output) 不在输出转义特殊字符 例如:RewriteRule /foo/(.) /bar?arg=P1\%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed 13) PT(pass through to next handler) 传递给下一个处理 例如: RewriteRule ^/abc(.) /def$1 [PT] # 将会交给/def规则处理 Alias /def /ghi 14) S=num(skip next rule(s)) 跳过num条规则 15) E=VAR:VAL(set environment variable) 设置环境变量

支持原创技术分享,据说打赏我的人,都找到了女朋友!