我应该无法使用SVNParentPath在<Location />提供SVN回购的configuration,然后使用另一个位置<Location /foo>覆盖DAV和主机正常文件。 我希望在同一个子域中托pipe我的XSLT文件,并仍然在根目录下托pipe回购站。 当然,如果我有一个名为foo的回购,这是不可访问的,没关系。
<VirtualHost *:80> ... #Host XSLT files here <Location /foo> DAV Off </Location> #Host my repos relative to root, such as /my_repo/ <Location /> DAV svn SVNParentPath "myrepos" SVNListParentPath on SVNIndexXSLT "/foo/my.xsl" ... </Location> </VirtualHost>
但DAV SVN仍然在寻找回购:
<?xml version="1.0" encoding="utf-8"?> <D:error xmlns:D="DAV:" xmlns:m="http://apache.org/dav/xmlns" xmlns:C="svn:"> <C:error/> <m:human-readable errcode="720003"> Could not open the requested SVN filesystem </m:human-readable> </D:error>
编辑:我读了mod重写了一下,据我所知,重写规则的目标path只能是本地的,除非你使用redirect[R] 。 这例如工作,它创build一个redirect(HTTP 302):
RewriteEngine On RewriteRule ^/foo/(.*)$ http://someotherhost/foo/$1 [R]
但是,它仍然不能用于SVNIndexXSLT 。 可能是因为它不遵循redirect。
“ 请注意,一旦您在某个位置启用了DAV, 就不能禁用子位置。 ”(强调他们的)
你可以试试mod_rewriting你的出路。 如果你有一个
RewriteRule ^/foo/(.*)$ /some/local/directory/$1 [L]
从理论上讲,这可能会避开DAV,因为没有PT标志,它不应该把请求交给任何其他模块。 至less值得一试。
如果它不起作用,一定要回复这个,所以有人试图这样做会看不到;)
只需在svn.example.com上托pipesvn,并保持/为普通的http。
你有没有解决这个问题的答案? 我碰巧正在尝试完全相同的configuration,现在我遇到了和你一样的问题。
对于它的价值,有一半的解决scheme – 提供自动列出存储库(使用SVNListParentPath On)的能力对您来说并不重要。
你可以使用SVNPath指令来代替 – 这样你就可以像这样:
<Location /> SVNIndexXSLT "/repos-web/view/repos.xsl" # Other common options, such as Auth options can go here </Location> <Location /repository1> SVNPath /var/lib/svn/repositories/repo1 DAV svn </Location> <Location /repository2> SVNPath /var/lib/svn/repositories/repo2 DAV svn </Location> <Location /repository3> SVNPath /var/lib/svn/repositories/repo3 DAV svn </Location>
显然,如果你正在运行一个定期创build新的仓库的设置(仓库每个项目的方法),那么这对你来说并不会很吸引人。 但它会为一个小的,固定的,数量的存储库。
如果你想要用户友好的东西出现在http://svn.yourdomain.com/,你可以在apache文档根目录下放置一个硬编码的index.htm文件
我已经testing了这种方法,它的工作原理。 尽pipe丢失了自动生成的存储库列表(并且必须在httpd.conf中映射每个存储库)