用htaccess进行访问控制(转)
1. 文件访问控制
利用 httpd.conf 中的 Order、Files 及 FilesMatch 命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbidden”,如果你不想伤害用户的感情,就需要显示一些别的东西,通过Rewrite就可以实现这个特性:
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客户端都得用User-agent向服务器“自报家门”,以便服务器对不同的客户端作出不同响应。比如,某站点可能需要对浏览器、搜索引擎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之间默认的逻辑连接词是逻辑“与”。
- 这里的难点是理解逻辑转换,即德·摩根定律。
用htaccess进行访问控制(转)的更多相关文章
- CI框架入门1
CI框架入门: 1.url的特点 2.目录结构/布局 3.MVC分别在哪里,如何依葫芦画瓢 4.安全性 ...
- Apache http强制转为https页面访问(转)
1 在httpd.conf文件里使下面模块生效 LoadModule rewrite_module modules/mod_rewrite.so 2 httpd.conf配置文件或者是在httpd ...
- http服务详解(2)——httpd2.2的配置文件常见设置
摘要:一个服务的配置文件非常重要,弄懂配置文件是熟练掌握服务的必要前提. 一.httpd-2.2常见文件介绍 (1)配置文件: 主配置文件尽量别改,改自己的子配置文件 /etc/httpd/conf/ ...
- http2.4简单配置
前言: 上一篇博文说到了http的发展以及http完整请求响应的工作流程. 一.开篇: 从最简单的静态服务器开始. 之前说过,http是应用层协议,必定会在用户空间体现出具体的应用程序.常见的http ...
- PHP环境配置(1)
Apache下载 Apache下载地址:http://httpd.apache.org/download.cgi 第一步:点击Files for Microsoft Windows 第二步:点击Apa ...
- Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结
一. 简单实例介绍一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置: 1)在httpd.conf文件里 ...
- Centos6.8下编译安装LAMP的操作记录梳理
之前用的最多的web框架是LNMP,偶尔也会用到LAMP.接下来简单说下LAMP环境的部署记录,这里选择源码安装的方式: LAMP相关安装包下载地址:https://pan.baidu.com/s/1 ...
- WAPM环境配置(PHP入门2)
WAMP介绍 W:Window:开源免费 A:Apache:开源免费 M:MySQL:开源免费 P:PHP:开源免费 Apache下载 Apache下载地址:https://www.apachehau ...
- Apache里的httpd-vhosts.conf详解
首先看下面的配置: <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "D ...
随机推荐
- yii2源码学习笔记(四)
继续了解组件Component.php /** * Returns a value indicating whether a property is defined for this componen ...
- MySQL中删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...
- TatukGIS - GisDefs - ColorToHSL 过程
过程名称 ColorToHSL 所在单元 GisDefs 过程原型 procedure ColorToHSL(const _color: TColor; var _h: Rea ...
- google zxing 二维码扫描(android client分析)
一.总体架构 二.架构分析 1. com.google.zxing.client.android AmbientLightManager 环境光线管理 Detects ambient light an ...
- 【C语言】字符集和词汇
C语言字符集和词汇 一.相关基础知识 字符是组成语言的最基本的元素 词汇,又称语汇,是一种语言里所有的(或特定范围的)词和固定短语的总和 二.具体内容 C语言字符集由:字母.数字.空格.标点和特殊字符 ...
- 利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨
1.使用matlab制作.coe文件 查找表的构造 构造256点的正余弦表 exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表 matlab代码: 求sin fid = ...
- c++:参数型别的推导
STL源码剖析--侯捷 总结 尽管现在的很多语言支持参数类型的判别,但是c/c++并不支持这一特性. 但是我们可以通过一些技巧使得c++具有自动判别参数类型的特性. 模板 我们都知道在模板类和模板函数 ...
- C语言连接数据库
举个例子,连接SQL: // 打开数据库 strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet ...
- Fastreport怎么样在同一页上下部分打印相同内容
使用FastReport遇到个难题,不知道怎么解决 分组打印之后,需要同一页上下部分打印相同内容,就是一式两份的联单打印. 例如: 送货单 ********** A 这里上半页,地区分组之后的内容 * ...
- windows 下安装nodejs及其配置环境
第一步:下载安装文件下载nodejs,官网:http://nodejs.org/download/,我这里下载的是node-v0.10.28-x86.msi,如下图: 第二步:安装nodejs下载完成 ...