htaccess高级应用:防盗链阻止迅雷下载以及限制访问
导读: 合理利用htaccess文件,即使没有服务器的管理权限可以解决很多问题:比如用htaccess防盗链,阻止迅雷下载,限制用户访问指定类型的文件.判断User-agent阻止迅雷下载.
Rewrite的功能很强大, 合理的利用htaccess文件的设置 即使没有服务器的管理权限可以解决很多问题:
1. 用htaccess限制只能访问某种类型文件控制
httpd.conf 配置文件中可以用 Order、Files 及 FilesMatch 命令来阻止用户查看某种类型的文件,但是当用户被拒绝时,他们看到的是“403 Forbidden”. 方法请参考文章:禁止上传目录运行php的方法
如果你不想伤害用户的感情,就需要显示一些别的东西,通过htaccess来实现:
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !^(.+).css$
- RewriteCond %{REQUEST_FILENAME} !^(.+).js$
- RewriteCond %{REQUEST_FILENAME} !special.zip$
- RewriteRule ^(.+)$ /chat/ [NC]
- 该规则将仅允许用户请求.css, .js类型的文件,还有special.zip文件。
- RewriteRule 后面指定了限制规则:映射到/char/目录下处理。
- RewriteCond 后面的“感叹号”(!)起到了“否定”作用,它表明,对不满足后面正则表达式者应用RewriteRule规则,也就是对当前类型的文件将不应用规则。
- RewriteCond 之间是以逻辑“与”连接的,也就是只有当三个条件都不满足时才执行RewriteRule。
- 该规则也会限制访问.htm, .jpg等格式。
- 该规则不可以放在虚拟站点根目录(/)下,否则会死循环。
- 如果是二级目录,如/test/,那么传入RewriteCond的参数是以/test/开始的,因此从(.+)获得的文件名也含有/test/,读者必须对此多加小心。
- 要想仅获得文件名,可以将(.+)替换成([^/]+),并且去掉符号^,如下所示:
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !([^/]+).css$
- RewriteCond %{REQUEST_FILENAME} !([^/]+).js$
- RewriteRule ^(.+)$ /chat/ [NC]
2. 用 .htaccess 判断User-agent 阻止迅雷下载
什么是User-agent?User-agent是所有HTTP客户端都得向服务器“自报家门”,以便服务器对不同的客户端作出不同响应。比如,某站点可能需要对浏览器、搜索引擎crawl还有各类下载工具作出不同的响应。服务器就是通过所谓的User-agent进行区分的。
如果你的服务器提供某些资源的下载,那么你就必须多加小心诸如“迅雷”等下载软件,因为它们可能把你网站资源吸干,并且影响你的正常访客访问。为此,我们可以利用Rewrite限制某些UA的访问:
- RewriteEngine on
- RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC]
- RewriteRule . abuse.txt [L]
- 该规则限制“迅雷”客户端下载资源,并将下载文件重置到abuse.txt
- HTTP_USER_AGENT是Apache的内置变量
- 2.0.50727是迅雷User-agent的特征字符串
- RewriteRule后面的“点”表示“任意URI”,也就是不管请求的是什么,都输出abuse.txt
通常,我们不会仅限制一个UA。利用[OR]即可实现对多个UA作出统一处理:
- RewriteEngine on
- RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [NC,OR]
- # etc..
- RewriteCond %{HTTP_USER_AGENT} ^Net Vampire [NC]
- RewriteRule . abuse.txt [L]
3. 用.htaccess防盗链(hot-linking)
盗链图片是非常可耻的 .htaccess的Rewrite可以非常简单有效的防盗链:
- RewriteEngine On
- RewriteCond %{HTTP_REFERER} !^$
- RewriteCond %{HTTP_REFERER} !^http://(www.)?nowamagic.net/ [NC]
- RewriteCond %{REQUEST_URI} !hotlink.png [NC]
- 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高级应用:防盗链阻止迅雷下载以及限制访问的更多相关文章
- Apache服务器如何通过.htaccess文件设置防盗链?
Apache服务器通过.htaccess文件设置防盗链 用户经常面对的一个问题就是服务器的流量问题,而站点文件被盗链是其中最为主要的部分.所谓盗链,是指其他网站直接链接我们网站上的文件,一般来说,盗链 ...
- Nginx中防盗链(下载防盗链和图片防盗链)操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- Apache -- 利用.htaccess防盗链
在Apache服务器的前提下利用.htaccess文件来防盗链的原理是通过检查图片或文件请求头信息中的Referer属性(也就是请求的来源),判断它是否属于你所规定的合法的请求来源,从而实现让合法来源 ...
- Nginx优化之日志优化,URL访问控制,防盗链,及站点文件目录优化
Nginx日志相关优化与安全 日志切割脚本如下: #!/bin #日志切割脚本 Date=`date +%Y%m%d` Bdir="/usr/local/nginx" Nginxl ...
- PHP做好防盗链的基本思想 防盗链的设置方法
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...
- http请求之referer头与防盗链
在网页中的占用大流量的信息可以写成这个信息在网络上的url位置,这样就会减少本网站的流量,但是其他网站也 不会随意让你使用人家的资源,因为这样的情对人家的网站没有好处,会增加人家网站的流量,所以要防止 ...
- php 通过referer防盗链(以图片为例)
1.在网页里访问站外图片时,服务器如何知道是在站外引用的呢? (1)对比本服务器请求与跨服务器请求 图一——本服务器请求 图二——显示盗链的referer信息 通过对比也就知道referer显示的是引 ...
- asp.net MVC 网站图片防盗链的几种方法
目录 1. 通过 URL Rewrite Module 组件 2. 通过 nginx 图片防盗链 3.自定义 HttpHandler 处理 4. 通过 MVC 自定义路由规则防盗链 5. 通过 MVC ...
随机推荐
- 使用squid配置透明代理并对上网行为进行控制
使用Squid配置透明代理 环境:CentOS 6.4 + squid-3.1.10-20.el6_5.3.x86_64 1.检查squid是否默认安装,没有安装先安装 rpm -qa squid 假 ...
- C语言基础--for循环
for循环格式: for (初始化表达式;条件表达式;循环后增量表达式) { 语句; ... } 条件表达式: 和while, dowhile一样, 只有条件满足才会执行循环体 初始化表达式: 在整个 ...
- 后台返回JSON关于日期的格式化
JSONObject 可以将java对象转换成json格式,用于处理ajax请求或者做app是与前台的交互. 但是Date类型的也会做转换,很多时候我们是不想将日期的年月日分别转换成json的.可以通 ...
- Mac上常用的一些命令
FTP:先cd到要传的文件的文件夹>ftp 10.214.111.1cd到上传的ftp文件put 文件名 虚拟环境cd myproject. venv/bin/activate 激活sudo p ...
- eclipse新建安卓项目点击finish后窗口无法关闭
eclipse新建安卓项目点击finish后窗口不会自动关闭,而且工程会有很多报错: 如图,这个页面点击finish一直无法关闭,后来试了试,才发现是因为新建项目的第一个页面的sdk版本的问题: 这里 ...
- 利用Arduino快速制作Teensy BadUSB
0×00 介绍 本文想以较简单的方式,叙述Arduino版BadUSB的制作过程.我知道在这之前已经有很多前辈都写过相关的文章,但小白可能还有点迷糊,所以这篇文章是快速带大家入门了解,我也是菜B大神不 ...
- html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
* HTML5 现在已经不是 SGML(标准通用标记语言,是一种定义电子文档结构和描述其内容的国际标准语言) 的子集,主要是关于图像,位置,存储,多任务等功能的增加. * 拖拽释放(Drag an ...
- 转: SQL Server索引的维护 - 索引碎片、填充因子
转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...
- CentOS 7 为firewalld添加开放端口及相关资料
1.运行.停止.禁用firewalld 启动:# systemctl start firewalld 查看状态:# systemctl status firewalld 或者 firewall-cm ...
- Scalding初探之二:动手来做做小实验
输入文件 Scalding既可以处理HDFS上的数据,也可以很方便地在本地运行处理一些test case便于debug,Source有好多种 1 TextLine(filename) TextLine ...