可以将正则表达式捕获和替换与Apache DirectoryMatch指令一起使用吗?

时间:2020-03-06 14:19:22  来源:igfitidea点击:

有谁知道是否可以在Apache的DirectoryMatch指令中使用正则表达式捕获?我想做以下事情:

<DirectoryMatch ^/home/www/(.*)>
    AuthType Basic
    AuthName 
    AuthUserFile /etc/apache2/svn.passwd
    Require group  admin
</DirectoryMatch>

但到目前为止,我还没有成功。

具体来说,我正在尝试为Apache 2.0中服务器上的各个目录/虚拟主机创建基于组的HTTP Auth。

例如,指向/ home / www / a的站点A将可供组admin和组a中的所有用户使用,位于/ home / www / b的站点b将对组admin和b组中的所有用户可用,依此类推我想保留所有基于目录名的内容,以便可以轻松地将htpasswd用户添加到正确的组中,并使其尽可能自动执行脚本,但是当然也欢迎我们提出解决问题的其他建议。

解决方案

我们尝试做的事情看起来与每个用户的主目录非常相似。 Apache处理这些问题的方法是通过文件系统权限和.htaccess文件。我不相信有任何方法可以在随附的指令(AuthName等)中使用正则表达式捕获。

我们可以从完全不同的角度解决问题:启用perl模块,并可以在httpd.conf中包含一些perl脚本。然后,我们可以执行以下操作:

<Perl>
my @groups = qw/ foo bar baz /;
foreach ( @groups ) {
    push @PerlConfig, qq| <Directory /home/www/$_> blah </Directory> |;
}
</Perl>

这样,我们甚至可以从数据库中读取组和其他信息,或者通过简单地遍历/ home / www或者其他使我们喜欢的东西。