我有几个运行良好的 Subversion 存储库。我可以通过协议svn
和进行签出svn+ssh
。
为了检查限制性防火墙后面的存储库,我想http(s)
通过 Apache mod_dav_svn 启用访问。
可以通过浏览器访问存储库,但当我尝试检出存储库时,我得到了一个svn: Repository moved to 'url'
。如果我尝试像这样检出:
svn co https://servername/repo
它告诉我它移动到了https://servername/repo/
(注意结尾的斜杠),如果我尝试检查那个确切的网址,我会moved permanently
再次得到,但该网址与我输入的网址相同。
这是用于存储库的 apache 配置:
<VirtualHost *:443>
ServerName servername
ServerAlias servername
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/crt
SSLCertificateKeyFile /etc/apache2/ssl/key
DocumentRoot /svn
<Location />
Order allow,deny
Allow from all
DAV svn
SVNParentPath /svn
SVNListParentPath on
AuthType Basic
AuthName "SVN"
AuthUserFile /svn/users
#AuthzSVNAccessFile /svn/acl
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
有谁能给出正确的提示或推动吗?
答案1
确保在定义新位置时,它不会与其他导出的位置重叠。例如,如果您的主 DocumentRoot 导出到 /www,请不要在 中导出 Subversion 存储库
<Location /www/repos>
。如果对 URI /www/repos/foo.c 的请求到来,Apache 将不知道是否要在 DocumentRoot 中查找文件 repos/foo.c,或者是否委托 mod_dav_svn 从 Subversion 存储库返回 foo.c。结果通常是服务器出现 301 Moved Permanently 形式的错误。
因此,我更喜欢绝不在 VHost 的根目录中有 SVN 位置,对我来说,DocumentRoot /svn
+SVNParentPath /svn
似乎是大忌。
只是处于偏执模式(不能直接引用权威来源)我总是
- SVN 位置作为网络树中更深的根节点
- SVNParentPath 放置在 web-tree 之外
- Location 和 SVNParentPath| SVNPath 参数中的尾部斜杠