悄悄地你来了...
我哒哒的马蹄声是美丽的错误,我不是归人,是个过客…

当前位置 > 行者居 > 学习笔记 > Other >

使用.htaccess设置图片防盗链的详细方法

时间:2020-03-18 09:02  阅读:
来源:行者居  作者:ZSY.RED
对于虚拟主机用户来说,最方便的莫过于利用.htaccess设置图片防盗链了。上网搜了一下,.htaccess规则写法很多,但是大部分的区别在于最后一行,下面我们先看看正确的.htaccess防盗链写法,稍后我再详细解释一下最后一行的重点。

真正有用的.htaccess写法为

  • RewriteEngine on
  • RewriteCond %{HTTP_REFERER} !^$ [NC]
  • RewriteCond %{HTTP_REFERER} !jb51.net [NC]
  • RewriteCond %{HTTP_REFERER} !youdao.com [NC]
  • RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
  • RewriteCond %{HTTP_REFERER} !twitter.com [NC]
  • RewriteCond %{HTTP_REFERER} !facebook.com [NC]
  • RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
  • RewriteCond %{HTTP_REFERER} !google.cn [NC]
  • RewriteCond %{HTTP_REFERER} !google.com [NC]
  • RewriteCond %{HTTP_REFERER} !google.com.tw [NC]
  • RewriteCond %{HTTP_REFERER} !google.com.sg [NC]
  • RewriteCond %{HTTP_REFERER} !google.com.hk [NC]
  • RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
  • RewriteCond %{HTTP_REFERER} !soso.com [NC]
  • RewriteCond %{HTTP_REFERER} !mail.qq.com [NC]
  • RewriteCond %{HTTP_REFERER} !cn.bing.com [NC]
  • RewriteCond %{HTTP_REFERER} !image.baidu.com [NC]
  • RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
  • RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
  • RewriteRule .(png|jpg)$ /no.gif [R,NC,L]

把.htaccess文件和no.gif文件一起上传到了根目录,注意看最后一行,当指定类型(png或jpg)的图片出现在非上述列表中的网站时,图片会自动替换成no.gif。

解释一下上述语句:

1、RewriteCond %{HTTP_REFERER} !^$ [NC]

允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。

2、 RewriteCond %{HTTP_REFERER} !zhukun.net [NC]

设置允许访问的HTTP来源,包括我们的自身站点、Google、Baidu、Bloglines、Feedburner、feedsky等。

3、 RewriteRule .(jpg|png)$ /no.gif [R,NC,L]

定义被盗链时替代的图片,让所有盗链 jpg、png 等图片的网页,显示根目录下的 no.gif 文件。注意:这里必须有一个“/”,而且no.gif件体积越小越好,越小就越节省流量。

4、说明一下其中的 R、NC 和 L

  • R 就是转向的意思
  • NC 指的是不区分大小写
  • L 指明本次转向到此结束,后续的转向不受先前判断语句的影响

特别注意:不建议同时禁止gif|jpg|png这三种图片文件,比如你已经禁止了gif,但是却用了no.gif来替换盗链图片,这样肯定会出问题。

如果你想同时禁止这三种类型,可以使用其他服务器上的图片来替代。


下面是其它网友的补充,直接本地例外一个目录:

  • RewriteEngine on
  • RewriteCond %{REQUEST_URI} ^/images
  • RewriteRule ^.*$ - [L]
  • RewriteCond %{REQUEST_FILENAME} .(jpg|gif|bmp|zip|rar|mp3|txt|png|wma|wmv)$ [NC]
  • RewriteCond %{HTTP_REFERER} !^$
  • RewriteCond %{HTTP_REFERER} !^$ [NC]
  • RewriteCond %{HTTP_REFERER} !www.zsy.red [NC]
  • RewriteCond %{HTTP_REFERER} !laoyao.me [NC]
  • RewriteCond %{HTTP_REFERER} !www.zhuaxia.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.google.com [NC]
  • RewriteCond %{HTTP_REFERER} !google.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.google.com.hk [NC]
  • RewriteCond %{HTTP_REFERER} !google.com.hk [NC]
  • RewriteCond %{HTTP_REFERER} !www.google.cn [NC]
  • RewriteCond %{HTTP_REFERER} !google.cn [NC]
  • RewriteCond %{HTTP_REFERER} !www.baidu.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.baidu.cn [NC]
  • RewriteCond %{HTTP_REFERER} !baidu.com [NC]
  • RewriteCond %{HTTP_REFERER} !baidu.cn [NC]
  • RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.ask.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.163.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.yahoo.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.sogou.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.soso.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.sina.com.cn [NC]
  • RewriteCond %{HTTP_REFERER} !www.msn.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.feedsky.com [NC]
  • RewriteCond %{HTTP_REFERER} !www.feedburner.com [NC]
  • RewriteRule (.*) /images/error.gif [R,NC,L]

代码说明:代码第二行,意思是将网站images目录的权限打开,也就是说images文件夹下的图片不进行防盗链,为什么呢?

因为我们的盗链警告图片放在这个目录下,你要是不把这个目录权限打开,那么别人盗链的时候,连这张盗链警告图片也显示不出来,只能显示红叉叉,这不是我们想要的效果。代码第四行为需要防盗链文件的后缀名,可以自行根据需要修改。

后边那些代码的意思是哪些网站可以不防盗链,都是一些搜索引擎之类的,还有自己站的网址。代码最后一行为盗链时显示的警告图片。也可以将这张图片存放到其他的网站,比如某些图片存储空间,这样的话就可以更加节省本站流量了。