图片等资源被盗链后,会极大的浪费我们的流量,即使虚拟主机不限制流量,也会浪费我们的带宽。今天,在网上偶尔看到了一篇防止盗链的文章,实践了一下,果然有效果,现将我的实践过程分享一下,仅供参考。
1.Apache中的.htaccess文件
.htaccess文件,也叫“分布式配置文件”,是Apache中相当重要的配置文件,格式为纯文本,提供了针对目录改变配置的方法,通过对一个特定的文档目录中放置一个该文件,以作用于该目录及其子目录。
通过.htaccess文件,可以实现简单的很多IIS中很繁琐甚至无法实现的功能,如密码保护、禁止列目录、阻止或允许特定的IP地址、实现网址301重定向等。
为了保护我们的图片等资源不被盗链,我们要将该文件放到所有要保护资源的上级根目录或每个目录都放置一个该文件。对于Wordpress而言,可以直接放在 wp-contents/uploads 目录下。
该文件属性应设置为644或“RW-R–R–”
2. 在.htaccess中添加防止盗链的相应指令
一般情况下,设置成这样
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?ucooper.com(/)?.*$ [NC]
RewriteRule .*/.(gif|jpg|jpeg|bmp|png)$ – [F]
</IfModule>
注意:
(1)在第四行把ucooper.com改为你的域名
(2)第五行为防止盗链的文件类型,根据需要,可以自行添加,用”|”分隔
(3)一般我们希望在别人盗链的位置提醒一下“请勿盗链”等字样,就可以把第五行改成这样,用我们的图片进行提醒。
RewriteRule .*/.(gif|jpg|jpeg|bmp|png)$ http://www.ucooper.com/alert.gif [R,NC,L]
R 就是转向的意思
NC 指的是不区分大小写
L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响
(4)在Wordpress中,目录下可能已经存在该文件,我们可以借助于CPanel的文件管理器编辑下该文件,注意最好不要覆盖掉原有的命令,如我的就修改成下面这样。如果没有该文件,则可以从其它地方复制一个,拷贝到相应目录下。
wp-content/uploads目录下添加的 .htaccess文件内容
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?ucooper.com(/)?.*$ [NC]
RewriteRule .*/.(gif|jpg|png|zip|pdf|doc)$ http://www.ucooper.com/alert.gif [R,NC,L]
</IfModule>
WordPress 根目录下的 .htaccess,不需要修改下面这个
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index/.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
(5)该网站可以提供一些自动生成该文件的功能,各位可以试一下。
http://www.wangqu.org/htaccess/#a_Pic
3. 测试一下吧
在其它博客里添加下我们站点中的图片测试下效果吧,我的显示效果如下:
4. 为了进一步节省流量,建议不要把图片放在自己网站上,可以放在flicker等图床上。