可以路由到多个subversion存储库而无需单独的虚拟主机吗?

时间:2011-02-11 16:59:42

标签: php svn mod-rewrite apache2 mod-dav-svn

我只是想知道是否有可能,如果有的话,有人会引导我走向正确的方向吗?

基本上这就是我目前的Linux机箱正在做的事情:

<VirtualHost *:443>
    ServerName co.svnr.net
    ServerAdmin admin@svnr.net
    ServerAlias co

    <Location /shauny/test>
        DAV svn
        SVNPath /home/svn/public/shauny/test
        AuthName "Test repository"
    </Location>

    #a million other Locations later....

    SSLEngine on
    SSLCertificateFile /home/certs/svnr/server.crt
    SSLCertificateKeyFile /home/certs/svnr/server.key
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown 
</VirtualHost>

这很棒且有效,但是说50个以上的svn存储库是不可行的。理想的解决方案是指出PHP5中的Handler(在Linux机器上托管),它接受超全局$ _GET中的用户名/存储库,然后将它们重定向到存储库(如果存在,否则重定向到404)。 / p>

但是......甚至可能吗? PHP5可以读取Subversion存储库和身份验证吗?

在我看来,让PHP5处理它们会更可行,因为我可以根据使用情况等生成一些日志......

非常感谢大家,如果你不清楚什么让我知道。

2 个答案:

答案 0 :(得分:1)

我们在开发箱上进行了这种设置(诚然只有3个回购),我们只是将Location指令设置为指向subversion root并使用SVNParentPath:

<Location /shauny>
        DAV svn
        SVNParentPath /home/svn/public/shauny
        AuthName "Test repository"
</Location>

答案 1 :(得分:0)

是的,这是可能的。

查看SVNParentPath。这可能就是你所追求的。不知道它将如何与您的虚拟主机设置一起使用,并且您可能必须移动目录(如果它们不共享父项),但它可能是朝着正确方向迈出的一步。

当您需要不同的基于位置的设置时,唯一的问题就出现了,例如,如果您使用不同的身份验证名称对每个仓库进行身份验证。在这种情况下,最好不要使配置保持不变。

至于通过PHP接口包装SVN模块,无论如何都要添加PHP代码。虽然它应该在理论上起作用,但我会在实践中避免它。通过在提交,读取等操作中添加前/后挂钩,可以在每个存储库的基础上完成任何类型的SVN日志记录。通过添加Apache指令可以更好地处理全局“每个repo”日志记录。