文章关键字 ‘htaccess’

用HTACCESS为你的博客设置图片防盗链

2008年12月6日,星期六

自打博客开始建立起就常遇上一些无耻的小偷,盗取我的文章资源并且不给一个Backlink,还直接使用本服务器上的图片,浪费我宝贵的流量,极大地影响了我在Google等搜索引擎中的形象,介于此,终于痛下决心做一个图片防盗链,坚决抵制各无耻小偷。

设置图片防盗链,首先是保护了你的文章的版权,你的文章可能被放在别的网站上,并且没有标明作者,现在只要对图片进行了防盗处理,读者在浏览文章时,图片无法正常显示,他就自然而然到你的网站上浏览。(当然前提是你的这篇文章中有图片)。

再则是节省了服务器资源。现在很多博友都用国外的服务器,不像国内的无限流量(多数也是骗人的),流量极为宝贵。使用防盗链,原本图片可能有200KB(特别是一些把大的图片放在本地博客上的朋友),现在放上一个提示出错的图片只要2KB就够了 :)

鉴于此,无论如何也要设计防盗链来保护你的劳动成果!

好了,现在开始讲讲如何设置防盗链吧。

第一种方法:服务器设置

有些主机使用cPanel的管理后台,请登陆cPanel-》Security-》Hotlink Protection-》Enable(启用)。在Urls to Allow Access处填写允许的网站来源,每行填写一个;Extensions to allow处填写需要保护的后缀名,使用半角逗号隔开,如 jpg,gif,png。详情请浏览无边无际的文章

第二种方法:.HTACCESS文件中设置

Lamp(Linux+Apache+MySQL+PHP)用户最大的好处在于HTACCESS文件的设置,利用HTACCESS文件,可以最大程度自己定义需要的效果,如这个防盗链。

如果在本地创建 .htaccess 文件可能会遇到无法创建的麻烦,请从网上下载一个 .htaccess 文件或本地创建好文件后使用FTP等软件重命名即可。

  1. <IfModule mod_rewrite.c>
  2. # 开启Rewrite模块
  3. RewriteEngine On
  4. # 定义要保护的文件夹,建议只要保护上传文件夹(/wp-content/uploads/)就可以,主题文件夹之类的就算了
  5. RewriteBase /wp-content/uploads/
  6.  
  7.  
  8. #允许的URL来源
  9.  
  10. #允许空的来源,因为用户可能手动输入图片网址
  11. RewriteCond %{HTTP_REFERER} !^$ [NC]
  12. #允许自己的网站访问啦
  13. RewriteCond %{HTTP_REFERER} !photozero.net [NC]
  14. #允许几个常用的在线阅读器的访问
  15. RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
  16. RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
  17. RewriteCond %{HTTP_REFERER} !google.com [NC]
  18. RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
  19. RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
  20.  
  21. #括号中的是要保护的文件拓展名,这里只保护了 gif,jpg,png,再加上出错时的图片地址 unavailable.png
  22. RewriteRule .*\.(gif|jpg|png)$ unavailable.png [L]
  23. </IfModule>

把以上代码放到.htaccess文件中(下载.htaccess 文件参考),将.htaccess文件上传到/wp-content/uploads/目录,再自己做一张 unavailable.png 图片,同样放到 /wp-content/uploads/ 下即可。

再说明一下,这里的出错后的图片是存放在本地的unavailable.png,这样还有个问题,由于这个效果是不转向直接读取unavailable.png文件后发送到客户端,如果图片被盗链后实际上可能会调用很多次,比如

http://photozero.net/wp-content/uploads/2008/11/123.jpg

http://photozero.net/wp-content/uploads/2008/11/456.jpg

http://photozero.net/wp-content/uploads/2008/11/789.jpg


这样做还是需要重新下载N次unavailable.png图片(尽管每张图片才2KB)。

另外一种方法是出错后转跳到指定的一张图片,如 http://example.com/unavailable.png ,出错后统一转跳到这里,实际上浏览器会缓存这张图片,也就是说只要下载1次就够了,这样做更节约流量!

  1. #把上面的RewriteRule ... 这一句替换成
  2. RewriteRule .*\.(gif|jpg|png)$ http://example.com/unavailable.png [R,NC,L]

这种效果在遇到盗链时,用301/302转向到http://example.com/unavailable.png而不是上面的直接读取unavailable.png文件。在使用这种方法时要注意,不要把http://example.com/unavailable.png放在上面的防盗链保护的范围之内!否则会引起循环重定向,重则导致浏览器崩溃!(建议把图片放在根目录或者放在网络相册之类的)

OK,说完了,自己要不要试一试?效果参见本站 :) 下载.htaccess 文件参考,本站错误图片显示

http://photozero.net/wp-content/uploads/unavailable.png

*本人对HTACCESS的了解属于外行,如果错误,欢迎指正,也望高手莫笑。