重定向 mod_dav_svn 位置下的特定子文件夹

重定向 mod_dav_svn 位置下的特定子文件夹

我正在使用 mod_dav_svn 设置 svn 服务器。我希望满足以下所有要求:

  • 存储库集合位于 repos.example.com/,而不是 repos.example.com/svn
  • 非 svn 内容可从同一服务器的 repos.example.com/repo-style 获取。这是为了启用样式信息。我可以接受我无法拥有同名的 repo。

当前配置如下:

<VirtualHost *:80>
  ServerName repos.example.com

  <Location />
    DAV svn

    AuthType Basic
    AuthName "Log In"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    AuthLDAPURL ldap://***
    AuthLDAPBindDN ***
    AuthLDAPBindPassword ***
    require valid-user

    SVNListParentPath on
    SVNParentPath /mnt/repos/svn
    SVNIndexXSLT /repo-style/svnindex.xsl
    AuthzSVNAccessFile /mnt/repos/svn-auth/access
  </Location>
</VirtualHost>

上面的问题是,当对 repos.example.com/repo-admin 的请求到来时,mod_dav_svn 会回复说存储库不存在。我需要设计一个重写方案,隔离对该特定子目录的请求,并提供常规 html 或 php 或其他内容。

我尝试过使用重写或别名来实现这一点,但没有成功。如有任何意见,我将不胜感激。

答案1

好吧,如果我理解你的问题正确的话,那么你有两个选择:

第一个选项是授予每个人读取文件的权限,但写入操作需要授权用户。配置示例:

<Location /svn>
  DAV svn
  SVNParentPath /var/svn

  # Authentication type, name, etc.

  # Authorization: Authenticated users only for non-read-only
  #                (write) operations; allow anonymous reads
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>
</Location>

在此了解更多信息:全面访问控制

第二个选项是使用 AuthzSVNAccessFile。此选项使您能够更灵活地配置每个目录和每个项目的访问。示例配置:

[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak

# Default access rule for ALL repositories
# Everyone can read, admins can write, Dan German is excluded.
[/]
* = r
@admin = rw
dangerman =

# Allow developers complete access to their project repos
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw

# Give the doc people write access to all the docs folders
[/trunk/doc]
@docs = rw

# Give trainees write access in the training repository only
[TrainingRepos:/]
@training = rw

在此了解更多信息:AuthzSVNAccessFile 如何工作?

答案2

根据关于位置合并顺序的问题关于Apache 2 部分在配置中,只有块声明<Location /repo-style>可以覆盖已声明的<Location />交付DAV svn

由于Directory指令没有优先级,唯一的选择是通过部分内容来传递静态内容Location,例如用您最喜欢的脚本语言快速编写的 CGI 脚本。

相关内容