我正在尝试在Windows Server 2008下的Apache2上配置SVN Web访问以获得不同的写入权限。
我接下来有Apache2 conf:
<Location /svn>
SVNParentPath "E:\SVN"
DAV svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repositories"
Require valid-user
AuthUserFile svn-auth.txt
AuthzSVNAccessFile svn-acl.txt
</Location>
<Location /svn/foobar>
SVNParentPath "E:\SVN\foobar"
DAV svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repositories"
Require valid-user
AuthUserFile svn-auth.txt
AuthzSVNAccessFile svn-acl.txt
</Location>
E:\SVN
是所有存储库的根目录 - 我想列出所有存储库。它包含E:\SVN\test
- 是一个项目存储库。
和E:\SVN\foobar
- 是一个包含的子根目录
E:\SVN\foobar\foo
和E:\SVN\foobar\bar
- 项目存储库。
文件svn-auth.txt
包含htpasswd.exe
文件svn-acl.txt
包含写访问规则,但它不起作用!事件它只包含一个全局权限:
[/]
* = rw
SVN的Apache2配置中SVNPath
和SVNParentPath
之间有什么不同?也许它会有意义吗?
当然,如果我添加一个组或用户,它也不起作用:
[groups]
full = abatishchev
[/]
* = r
@full = rw
abatishchev = rw
我正在403 Forbiden
。
我做错了什么? TIA!
更新:我从error.log找到了一条记录:
The URI does not contain the name of a repository. [403, #190001]
这意味着什么?
答案 0 :(得分:5)
SVNPath
用于一个存储库,SVNParentPath
用于包含多个存储库的根目录。因此,您应该删除Apache配置文件中的第二个位置,因为如果您尝试访问http://<host>/svn/foobar
,它会与第一个位置冲突。
您应该为访问和身份验证文件设置绝对路径,确保Apache服务具有对父目录和所有存储库的读/写访问权限,以及对这些访问和身份验证文件的读取权限,这在手册中经常被忽略安装。
例如:
<Location /svn>
RedirectMatch ^(/svn)$ $1/
SVNParentPath E:\SVN
DAV svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repositories"
Require valid-user
AuthUserFile C:\SVN\conf\svn-auth.txt
AuthzSVNAccessFile C:\SVN\conf\svn-acl.txt
</Location>
您将在Version Control with Subversion中找到所有必要的信息(这是最新版本的链接,尽管最近Apache配置设置没有改变)。
然后,您应该能够为您的存储库指定组和用户的全局或个人权限。可以找到here的示例,其名称为:
[groups]
full = abatishchev, anotherguy
main = abatishchev
[/]
* = r
@full = rw
abatishchev = rw
[foobar:/]
* =
@main = rw
full = r
[otherproject:/]
@main = rw
full = r
在此示例中,您已在[/]
中设置了一般规则,然后是foorbar
(以及以下所有内容)和otherproject
的特定规则。您甚至可以为存储库的各个目录指定特定规则。
答案 1 :(得分:2)
更改Apache配置
<Location /svn>
到
<Location /svn/>
解决了目录列表中403
错误的问题
答案 2 :(得分:2)
这不是你问题的直接答案,而且现在从头开始学习东西总是很棒的,但是当你在Windows机器上看到我认为我会提到{{ 3}}。这是一个点击式,非常好的配置SVN二进制文件的包装器,它也提供了自己的Web访问。