• 用htaccess进行访问控制

    使用RewriteCond和RewriteRule
    服务器君一共花费 469.811 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面提到了很多有用的访问控制方法,其实通过Rewrite也能实现类似的功能,而且可以更强大。

    1. 文件访问控制

    利用 httpd.conf 中的 Order、Files 及 FilesMatch 命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbidden”,如果你不想伤害用户的感情,就需要显示一些别的东西,通过Rewrite就可以实现这个特性:

    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客户端都得用User-agent向服务器“自报家门”,以便服务器对不同的客户端作出不同响应。比如,某站点可能需要对浏览器、搜索引擎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之间默认的逻辑连接词是逻辑“与”。
    • 这里的难点是理解逻辑转换,即德·摩根定律。
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] urls.py设置技巧 8 个条目
  2. [智力开发与知识管理] 整体性学习步骤 9 个条目
  3. [C语言程序设计] 结构体基本知识 1 个条目
  4. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  5. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  6. [PHP程序设计] PHP与Stream流 5 个条目
  7. [PHP程序设计] PHP数组探索 4 个条目
  8. [移动开发] Android Studio的使用技巧 4 个条目
  9. [Python程序设计] Python Web部署的背景知识 9 个条目
  10. [数据库技术] MySQL常用自带函数 3 个条目
  11. [C语言程序设计] C语言里的全局变量 2 个条目
  12. [Python程序设计] Tornado 服务器环境配置 3 个条目
窗口 -- [八点]