导读: 合理利用htaccess文件,即使没有服务器的管理权限可以解决很多问题:比如用htaccess防盗链,阻止迅雷下载,限制用户访问指定类型的文件.判断User-agent阻止迅雷下载.

Rewrite的功能很强大, 合理的利用htaccess文件的设置 即使没有服务器的管理权限可以解决很多问题:

1. 用htaccess限制只能访问某种类型文件控制

httpd.conf 配置文件中可以用 Order、Files 及 FilesMatch 命令来阻止用户查看某种类型的文件,但是当用户被拒绝时,他们看到的是“403 Forbidden”.  方法请参考文章:禁止上传目录运行php的方法

如果你不想伤害用户的感情,就需要显示一些别的东西,通过htaccess来实现:

  1. RewriteEngine On
  2. RewriteCond %{REQUEST_FILENAME} !^(.+).css$
  3. RewriteCond %{REQUEST_FILENAME} !^(.+).js$
  4. RewriteCond %{REQUEST_FILENAME} !special.zip$
  5. RewriteRule ^(.+)$ /chat/ [NC]
  • 该规则将仅允许用户请求.css, .js类型的文件,还有special.zip文件。
  • RewriteRule 后面指定了限制规则:映射到/char/目录下处理。
  • RewriteCond 后面的“感叹号”(!)起到了“否定”作用,它表明,对不满足后面正则表达式者应用RewriteRule规则,也就是对当前类型的文件将不应用规则。
  • RewriteCond 之间是以逻辑“与”连接的,也就是只有当三个条件都不满足时才执行RewriteRule。
  • 该规则也会限制访问.htm, .jpg等格式。
  • 该规则不可以放在虚拟站点根目录(/)下,否则会死循环。
  • 如果是二级目录,如/test/,那么传入RewriteCond的参数是以/test/开始的,因此从(.+)获得的文件名也含有/test/,读者必须对此多加小心。
  • 要想仅获得文件名,可以将(.+)替换成([^/]+),并且去掉符号^,如下所示:
    1. RewriteEngine On
    2. RewriteCond %{REQUEST_FILENAME} !([^/]+).css$
    3. RewriteCond %{REQUEST_FILENAME} !([^/]+).js$
    4. RewriteRule ^(.+)$ /chat/ [NC]
 

2. 用 .htaccess 判断User-agent 阻止迅雷下载

什么是User-agent?User-agent是所有HTTP客户端都得向服务器“自报家门”,以便服务器对不同的客户端作出不同响应。比如,某站点可能需要对浏览器、搜索引擎crawl还有各类下载工具作出不同的响应。服务器就是通过所谓的User-agent进行区分的。

如果你的服务器提供某些资源的下载,那么你就必须多加小心诸如“迅雷”等下载软件,因为它们可能把你网站资源吸干,并且影响你的正常访客访问。为此,我们可以利用Rewrite限制某些UA的访问:

  1. RewriteEngine on
  2. RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC]
  3. RewriteRule . abuse.txt [L]
  • 该规则限制“迅雷”客户端下载资源,并将下载文件重置到abuse.txt
  • HTTP_USER_AGENT是Apache的内置变量
  • 2.0.50727是迅雷User-agent的特征字符串
  • RewriteRule后面的“点”表示“任意URI”,也就是不管请求的是什么,都输出abuse.txt

通常,我们不会仅限制一个UA。利用[OR]即可实现对多个UA作出统一处理:

  1. RewriteEngine on
  2. RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC,OR]
  3. RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [NC,OR]
  4. # etc..
  5. RewriteCond %{HTTP_USER_AGENT} ^Net Vampire [NC]
  6. RewriteRule . abuse.txt [L]
 

3. 用.htaccess防盗链(hot-linking)

盗链图片是非常可耻的 .htaccess的Rewrite可以非常简单有效的防盗链:

  1. RewriteEngine On
  2. RewriteCond %{HTTP_REFERER} !^$
  3. RewriteCond %{HTTP_REFERER} !^http://(www.)?nowamagic.net/ [NC]
  4. RewriteCond %{REQUEST_URI} !hotlink.png [NC]
  5. RewriteRule .*.(gif|jpg|png)$ /hotlink.png [NC]
 

简单解释一下该规则的功能:

  • 除本站以外其他网站都不得引用本站图片,具体可以理解为:
  • 如果引用站点为“空”或者是“本站”,或者,所引用对象是“hotlink.png”,那么就允许访问。
  • 再次提醒,RewriteCond之间默认的逻辑连接词是逻辑“与”。
  • 这里的难点是理解逻辑转换,即德·摩根定律。
  • 来源:转载
  • 原作者:现代魔法学院 - http://www.nowamagic.net/academy/detail/1225940
  • 版权声明:欢迎转载,但请以连接方式备注出处、作者。
  • 本文链接地址:http://www.lao8.org/article_1445/htaccess_zuzhixunleixiazai

htaccess高级应用:防盗链阻止迅雷下载以及限制访问的更多相关文章

  1. Apache服务器如何通过.htaccess文件设置防盗链?

    Apache服务器通过.htaccess文件设置防盗链 用户经常面对的一个问题就是服务器的流量问题,而站点文件被盗链是其中最为主要的部分.所谓盗链,是指其他网站直接链接我们网站上的文件,一般来说,盗链 ...

  2. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  3. Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  4. Apache -- 利用.htaccess防盗链

    在Apache服务器的前提下利用.htaccess文件来防盗链的原理是通过检查图片或文件请求头信息中的Referer属性(也就是请求的来源),判断它是否属于你所规定的合法的请求来源,从而实现让合法来源 ...

  5. Nginx优化之日志优化,URL访问控制,防盗链,及站点文件目录优化

    Nginx日志相关优化与安全 日志切割脚本如下: #!/bin #日志切割脚本 Date=`date +%Y%m%d` Bdir="/usr/local/nginx" Nginxl ...

  6. PHP做好防盗链的基本思想 防盗链的设置方法

    盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...

  7. http请求之referer头与防盗链

    在网页中的占用大流量的信息可以写成这个信息在网络上的url位置,这样就会减少本网站的流量,但是其他网站也 不会随意让你使用人家的资源,因为这样的情对人家的网站没有好处,会增加人家网站的流量,所以要防止 ...

  8. php 通过referer防盗链(以图片为例)

    1.在网页里访问站外图片时,服务器如何知道是在站外引用的呢? (1)对比本服务器请求与跨服务器请求 图一——本服务器请求 图二——显示盗链的referer信息 通过对比也就知道referer显示的是引 ...

  9. asp.net MVC 网站图片防盗链的几种方法

    目录 1. 通过 URL Rewrite Module 组件 2. 通过 nginx 图片防盗链 3.自定义 HttpHandler 处理 4. 通过 MVC 自定义路由规则防盗链 5. 通过 MVC ...

随机推荐

  1. Node.js 常用工具 util

    util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherits(constructor ...

  2. JavaScript 用法

    JavaScript 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 & ...

  3. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  4. mysql 日期类型比较

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间       日期格式                 日期范围 ------------ ------ ...

  5. brute-force search

    #include <pcl/search/brute_force.h> #include <pcl/common/common.h> #include <iostream ...

  6. IOS7 SDK 几宗罪

    IOS7 app 默认是全屏模式,所以之前的程序窗口会上向移动到状态栏上面,所以在底边会有一条大白边 表格单元格,默认是白色背景,之前程序设置的透明效果,这里不在起作用,需要用下面的委托方法改变.- ...

  7. ${param.origin}

    拦截器中设置未登录拦击跳转链接 response.sendRedirect(request.getContextPath() + "/loginAndRegister/loginAndReg ...

  8. LoadRunner常见问题

    1.Error -27257: Pending web_reg_save_param/reg_find/create_html_param[_ex] request(s) detected and r ...

  9. Spark 个人实战系列(1)--Spark 集群安装

    前言: CDH4不带yarn和spark, 因此需要自己搭建spark集群. 这边简单描述spark集群的安装过程, 并讲述spark的standalone模式, 以及对相关的脚本进行简单的分析. s ...

  10. C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数

    基类和派生类的定义以及虚函数 基类Quote的定义: classs Quote { public: Quote() = default; Quote(cosnt std::string& bo ...