LocationMatch和DAV svn

时间:2009-03-20 11:45:46

标签: svn apache apache2 mod-dav-svn dav

我正在尝试通过多个URL访问我们的subversion存储库。为此,我正在考虑使用LocationMatch指令。我的配置是:

<Location ~ "/(svn|repository)">
  DAV svn
  SVNPath /opt/svn
  AuthzSVNAccessFile /etc/subversion/access
</Location>

以上配置不起作用......奇怪的是,如果我使用例如此配置,它适用于两个URL:

<Location ~ "/(svn|repository)">
  SetHandler server-status
</Location>

对我而言,似乎DAV svn和LocationMatch的组合并没有真正起作用......或者我在这里做错了什么?

4 个答案:

答案 0 :(得分:1)

我也遇到问题,因为我想使用正则表达式来避免其他子路径被我的匹配抓住。

e.g。

<LocationMatch "^/test/.*$>

不同
<Location "/test">

在后者中,http://site.com/newproduct/test会被最后一个捕获,但不会被第一个捕获。 http://site.com/test/scripts也是如此。这就是LocationMatch存在的原因,但每当我输入正则表达式时它都会失败。如果我使用没有任何正则表达式的LocationMatch它似乎工作。

答案 1 :(得分:0)

客户端是否收到错误,HTTP错误日志中是否有错误?

SVN可能会因为您将多个位置映射到单个SVN回购而感到困惑。见http://subversion.apache.org/faq.html#http-301-error。我现在正在为另一个问题排除故障。

如果删除正则表达式,它是否有效?我会假设是,但我想验证。

<Location "/svn">

答案 2 :(得分:0)

问题似乎是当你在LocationLocationMatch部分中使用正则表达式时,Apache服务器会使用正则表达式的内容重写请求中的一些元数据(可能让获取此请求的处理程序,它是由正则表达式定位的。)

当dav_svn处理程序获取请求时,它会查询此元数据以解析获取所请求资源所需的路径。因为正则表达式不是真正的路径,所以会出现如下错误:

svn: PROPFIND of '%5E/(svn%7Crepository)/!svn/vcc/default': Could not parse response status line

我没有任何修复,除了不使用带有dav_svn的正则表达式:在我的情况下,我想使用XSLT格式化程序在使用Web浏览器访问它时为subversion存储库显示一个很好的UI,并且应该在托管subversion repo的同一主机名上的不同路径上访问XSL资源,因此我想使用正则表达式Location来使XSL资源的路径不会访问dav_svn处理程序。这是一个半身像,所以我只是在不同的主机名上部署了websvn,就是这样。

答案 3 :(得分:0)

快速解决方案有效:只需添加您对每个虚拟主机的引用,您想要使svn repro可访问。