Apache图片防盗链设置

AndyYang| 阅读:491 发表时间:2012-10-26 16:45:00 apache
摘要:所谓盗链,是指对方网站直接链接您网站上的文件,而不是将其置于自己的服务器上,一般而言,盗链的对象大多为较耗带宽的大体积文件,如图片、视频等,从某种意义上说,这事实上造成了让您为其访问流量买单:

  所谓盗链,是指对方网站直接链接您网站上的文件,而不是将其置于自己的服务器上,一般而言,盗链的对象大多为较耗带宽的大体积文件,如图片、视频等,从某种意义上说,这事实上造成了让您为其访问流量买单:不仅您的服务器带宽被无任何回报地占用,而且,往往会在很大程序上影响您网站的访问速度。

  要设置防盗链,以图片为例,首先要开启apache支持:
    一:启用rewrite
    # LoadModule rewrite_module modules/mod_rewrite.so
    去除前面的 #
    LoadModule rewrite_module modules/mod_rewrite.so
    如果启用.htaccess还需修改
    AllowOverride None    修改为: AllowOverride All
    建议:如果你对httpd.conf拥有修改权,直接写在httpd.conf中更好,更快。那样可以防止apache在工作目录的每个文件夹下查找.htaccess文件,这是apache的优化之一。

    二:设置两个虚拟站点(可以指向同一目录)
    我设置了www.work.com和www.ceshi.com指向同一个工作目录(如果不会的可以查看:http://hi.baidu.com/ycvsjl/item/3787f6f411be0008d99e7211)

    然后设置一个静态测试页面index.html

<html>
<body>
<p>index</p>
<img src="http://www.work.com/images/picture.jpg">
</body>
</html>
    然后在httpd.conf中或者.htaccess中添加
  
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !work.com [NC]
RewriteRule .(jpg|jpeg|bmp|png) http://www.work.com/ceshi.bmp [R,NC,L]
    1、RewriteEngine on
    开启重写,固定写法

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

    3、RewriteCond %{HTTP_REFERER} !work.com [NC]
    设置允许访问的HTTP来源,包括我们的自身站点、Google、Baidu、Bloglines、Feedburner、feedsky等。比如:
    RewriteCond %{HTTP_REFERER} !baidu.com [NC]

    4、RewriteRule .(jpg|jpeg|png|gif) http://www.work.com/ceshi.bmp [R,NC,L]
    定义被盗链时替代的图片,让所有盗链 jpg、jpeg、png、gif 等图片的网页,显示ceshi.bmp文件(ceshi.bmp件体积越小越好,越小就越节省流量。)
    特别注意:不建议同时禁止jpg|jpeg|png|gif|bmp这五种图片文件,比如你已经禁止了gif,但是却用了no.gif来替换盗链图片,这样肯定会出问题(我发现网上大部分文档都犯了这种错误,简直是误人子弟,搞得我调试了一下,特指出)。如果你想同时禁止所有类型,可以使用其它服务器上(未设置过防盗链)的图片来替换演示。

    另外说明一下其中的 R、NC 和 L
    R:强制外部重定向、NC 指的是不区分大小写、L 指明本次转向到此结束,后续的转向不受先前判断语句的影响。
    
    还有:比如我们保护的是zip和rar格式的文件。那么只需要写成(gif|jpg|jpeg|bmp|png|zip|rar)就可以了,当有不被我们允许的域名下载zip和rar格式的文件的时候,页面将自动跳转到我们指定的地方去。
   
    然后分别用www.work.com和www.ceshi.com访问index.html就会发现前者显示的是正确的图片,而后者显示的是ceshi.bmp了。当然也可以在别的工作目录下添加相同的index.html,然后访问得到的结果也是一样的:ceshi.bmp。

    另:HTTP_REFERER与HTTP_HOST是两个不同的概念,请勿混淆。

本文为AndyYang原创,转载请注明出处!
如果您觉得好,可以打赏作者:
如果您觉得累了,是否想眺望远方:猛戳>>若兰网

已有0条评论

昵称:
邮箱:

  • 最新评论

若兰网 - www.rolan.wang
反馈
微信订阅号