2009-12-22 61 views
4

我正在尝试在Windows Server 2008下的Apache2上配置SVN Web访问权限以获得不同的写入权限。如何为不同的写权限配置SVN网页访问?

我旁边的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\fooE:\SVN\foobar\bar - 项目存储库的子根目录。

文件svn-auth.txt包含htpasswd.exe

文件svn-acl.txt生成包含一个写访问规则的一些用户的密码,但它不工作!事件它只包含一个全局权限:

[/] 
* = rw 

什么是Apache2的配置SVNPathSVNParentPath之间的不同为SVN?也许这是有道理的?

当然,如果我添加一组或用户不太多工作:

[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

这应该是在serverfault.com – Gonzalo 2009-12-22 18:59:03

+0

不幸的是,我没有找到答案.. – abatishchev 2009-12-22 19:00:55

+0

什么是在serverfault.com的链接? – 2009-12-22 19:37:50

回答

2

更改Apache的配置

<Location /svn> 

<Location /svn/> 

修复的目录403错误的上市

+2

通过阅读您在ServerFault上的其他PR,我意识到您的错误消息来自哪里,太糟糕了,您也没有把它放在这里。你可以简单地使用'RedirectMatch ^(/ svn)$ $ 1 /'指令来避免这个问题,它会在'http:// /svn'后面自动追加一个斜杠(参见我的修改示例)。 – RedGlyph 2009-12-23 17:44:36

5

SVNPath用于一个存储库,SVNParentPath用于包含多个存储库的根目录。因此,如果您尝试访问http://<host>/svn/foobar,则应删除Apache配置文件中的第二个位置,因为它与第一个位置冲突。

您应该为访问和身份验证文件设置绝对路径,确保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。您甚至可以为存储库的单个目录指定特定的规则。

+0

谢谢!我有我的辅助apache配置条目,因为e:\ svn可能包含e:\ svn \ foo(repo)和e:\ svn \ bar(具有repos数目的目录)。因此,每个回购根目录需要自己的位置条目 – abatishchev 2009-12-22 21:16:42

+1

您可以在Apache'Location'指令中使用正则表达式来排除次级根,也许这可能有助于将两者分开并避免冲突。如果你需要几个可能在一段时间后变得笨拙的子目录:一个'svnserve' SVN服务器允许任意的存储库结构,这将使你的配置变得更简单(你可以有子目录,不需要指定它们)。它也不那么重,并且减少了网络带宽。 – RedGlyph 2009-12-22 23:46:05

+0

你的想法听起来很酷,但不幸的是,这并没有帮助。根目录下的repo工作(e:\ svn \ some-proj),但是在子目录下的repo - 不是:“无法打开请求的SVN文件系统”(e:\ svn \ some-dir \ some-proj)。你有没有其他的Apache conf技巧来实现你所描述的任务? – abatishchev 2009-12-23 20:17:54

2

这不是直接回答你的问题,它总是很大的问题从现在开始从头开始学习东西,但看到你在Windows机器上时,我想我会提到VisualSVN server。这是一个点击,非常好的配置封装到SVN二进制文件,也提供了自己的Web访问。

+0

谢谢!我尝试过这个。不幸的是,它只支持一个存储库的根目录。根目录下的所有文件夹必须已经是存储库。但我有一个数字子目录(类别),只有存储库和位于 – abatishchev 2009-12-23 20:30:32