.htaccess动态授权访问(包括系统范围文件)

时间:2011-09-19 19:54:18

标签: apache .htaccess

我有一个托管多个域及其子域的服务器,我正在尝试使用.htaccess找到保护某些敏感文件夹和子域的正确方法。现在一切都很好,但我想到了一个非常可行的解决方案(编程方面),但我似乎无法得到.htaccess来做我的恶行竞标。

长话短说:

  • 我有一个存储在文件/数据库中的IP列表
  • 根据此列表生成一个文件,假设为/home/ip.allow
  • 该文件包含Allow个条目(Allow from 123.123.123.123

在我在此服务器上托管的域/子域中,我有简单的.htaccess文件,其中包含以下内容:

RewriteEngine On
Order allow, deny
Deny from all

我感兴趣的是如何包含/home/ip.allow所以我不必以编程方式查找和编辑vhosts路径中的所有.htaccess文件(仅在一个文件中包含所有条件)会让我的生活变得如此简单。)

我确实在Apache's mod_rewrite documentation中找到了RewriteMap指令,但这似乎只适用于重写,而不适用于授予访问权限。

有关此主题的任何想法?

1 个答案:

答案 0 :(得分:3)

你可以使用mod_rewrite做类似的事情。但是你需要改变一些事情。

您需要创建一个键/值映射,而不是让包含大量条目的文件看起来像这样:Allow from 123.123.123.123,我们可以将其传递给RewriteMap。在此示例中,由于您列出了一组允许访问的IP,因此该文件将包含一堆如下所示的条目:123.123.123.123 allow,其中“123.123.123.123”是密钥,“允许” “是价值。

现在我们必须使用RewriteMap为此设置一个映射,但是,我们只能在服务器配置或虚拟主机配置中使用它,而不是在Directory内, Files或.htaccess文件。因此,您可以在httpd.conf或虚拟主机文件中的某处设置它:

RewriteMap access_list txt:/home/ip.allow

现在,您可以使用访问此地图的RewriteCondaccess_list来访问任何.htaccess文件中的地图RewriteRule[F]除了发出RewriteCond ${access_list:%{REMOTE_ADDR}} ="" RewriteRule ^(.*)$ - [F,L] 之外什么都不做(禁止):

RewriteCond

这里的%{REMOTE_ADDR}只是试图找到123.123.123.123 allow作为地图文件的关键字。如果地图文件中唯一的东西是127.0.0.1且远程地址是="",则没有任何内容匹配,地图将返回一个空字符串,从而实现123.123.123.123位。否则,如果远程地址为{{1}},则返回“允许”,条件将失败,从而授予访问权限。

根据您设置地图文件的方式,您可以使用授予或拒绝。