我正在尝试通过多个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的组合并没有真正起作用......或者我在这里做错了什么?
答案 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)
问题似乎是当你在Location
或LocationMatch
部分中使用正则表达式时,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可访问。