【问题标题】:Can regex capture and substitution be used with an Apache DirectoryMatch directive?正则表达式捕获和替换可以与 Apache DirectoryMatch 指令一起使用吗?
【发布时间】:2011-02-19 15:03:41
【问题描述】:

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

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

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

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

例如,指向 /home/www/a 的站点 A 将对组 admin 和组 a 中的所有用户可用,位于 /home/www/b 的站点 b 将对组 admin 和组中的所有用户可用b 等。我想根据目录名称保留所有内容,以便我可以轻松地编写脚本将 htpasswd 用户添加到正确的组并尽可能自动化,但当然欢迎其他解决问题的建议。

【问题讨论】:

    标签: regex apache


    【解决方案1】:

    你可以从一个完全不同的角度来解决这个问题:启用 perl 模块,你可以在你的 httpd.conf 中包含一个小的 perl 脚本。然后你可以这样做:

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

    这样,您甚至可以从数据库中读取您的群组和其他信息,或者通过简单地查找 /home/www 或其他任何您喜欢的内容。

    【讨论】:

    • 这非常方便,但几乎是“不可靠的”,因为每次包含 Perl 和 Apache 的搜索最终都会得到大量关于如何配置 Apache 以运行 cgi 脚本的答案。其他苦苦挣扎的谷歌员工的参考:perl.apache.org/docs/2.0/api/Apache2/PerlSections.html
    【解决方案2】:

    您尝试执行的操作与per-user home directories 非常相似。 Apache 处理这些问题的方式是通过文件系统权限和.htaccess files。我不相信有任何方法可以在随附的指令(AuthName 等)中使用正则表达式捕获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 2021-08-11
      • 2022-01-08
      相关资源
      最近更新 更多