导读: 合理利用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. ROS 使用自带和usb摄像头获取图像

    笔记本自带的摄像头的设备号一般为/dev/video0 第一步:安装Webcam 驱动 $ sudo apt-get install git-core $ cd ~/catkin_ws/src $ g ...

  2. curl请求的时候总是提示400

    今天用curl测试一个接口,一直提示400 最后发现是url的问题,如下处理就可以了 $url = str_replace(' ', '+', $url);

  3. CircleImageView

    package com.cainiao5.cainiaoheadimg; import android.content.Context;import android.content.res.Typed ...

  4. input标签实现让光标不出现!

    实现不让光标出现的效果,很好用,例子如下: <input class="red" readonly unselectable="on" value=&qu ...

  5. JVM-class文件完全解析-属性表集合

    属性表集合 在前面魔数,次版本号,主板本号,常量池入口,常量池,访问标志,类索引,父类索引,接口索引集合,字段表集合,方法表集合,那么接下来就是属性表集合了.   在class文件,字段表,方法表都可 ...

  6. 第十章:Intent详解

    [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用 ...

  7. Java String字符串补0或空格

    package cn.com.songjy; import java.text.NumberFormat; //Java 中给数字左边补0 public class NumberFormatTest  ...

  8. 【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  9. zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令

    zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh). 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认 ...

  10. Day17_集合第三天

    1.HashSet类(掌握) 1.哈希值概念      哈希值:哈希值就是调用对象的hashCode()方法后返回的一个int型数字      哈希桶:简单点理解就是存储相同哈希值对象的一个容器 1. ...