这更多的是与 Apache 如何处理变量和 SetEnvIf 指令有关的问题。我有一个位于http://test.net/svn的 Subversion 服务器,SVN 配置如下:
<Location /svn>
DAV svn
SVNParentPath /path/to/repo/base
AuthzSVNAccessFile /path/to/access
AuthName "LDAP Auth"
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://172.20.20.20:389/dc=test,dc=net?uid" NONE
AuthLDAPBindDN "cn=svn,ou=system,dc=test,dc=net"
AuthLDAPBindPassword secret
Require valid-user
</Location>
在“/path/to/repo/base”中,我有大约 80 个存储库,每个存储库都可以通过http://test.net/svn/repo-name访问。这一 Apache 配置使用“/path/to/access 文件”处理所有存储库的身份验证。
将来,我将使用 LDAP 组进行授权。但是,我不想为每个存储库创建单独的 Apache 配置。基本上,我想使用请求 URI 为存储库名称设置一个变量。例如,我访问http://test.net/svn/repo-name/path/to/file.txt并且 Apache 知道“repo-name”是变量。
像这样的东西(语法不正确,只是伪代码):
SetEnvIf Request_URI "http://test.net/svn/$1/.*" repo-name=$1
...
...
Require ldap-group cn=$repo-name,ou=system,dc=test,dc=net