我目前设置了几个 svn repo,供一小部分人使用。他们目前通过以下 URL 模式访问 repo: https://svn.example.com/svn/project 如果他们有多个包(有些,但不是全部都有)它的: https://svn.example.com/svn/project/packageA等等。
我想从 URL 中删除 /svn/。我尝试在 apache 中使用 RewriteRule 和 RedirectMatch,但没有成功。
这是尝试更改 URL 之前的虚拟主机文件:
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName www.svn.example.com
ServerAlias svn.example.com
DocumentRoot /var/svn
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
<Location /var/svn/>
DAV svn
SVNParentPath /var/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /var/svn/svn-auth-file
Require valid-user
</Location>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
有什么建议么?
答案1
前言
- 你的书面配置没有反映你的描述配置:
/svn
路径与/var/svn/
位置 - 您的配置一定不能工作(或与大麻烦): DocumentRoot == Location == SVNParentPath,因为它们 a) 不相关 b) 不同的参数
当你想改变你的仓库路径时,你只需要重写 SVN 位置的定义,在你的情况下它可以是 / (并且注意:在这种情况下,根下的非 WebDAV 树会出现问题,如果所有站点都是仓库,那么只有根位置才可以)
<Location />
对你的问题的简短回答
答案2
假设 您有两个 svn 存储库,位于:
- /var/svn/repo1
- /var/svn/repo2
因此 URL 将会是:
要求PackageA
使用Project1
URL 访问repo1
:
http://svn.example.com/project1/PackageA
可能的解决方案
-<Location /var/svn/>
+<Location />
DAV svn
-SVNParentPath /var/svn
+SVNPath /var/svn/repo1
-SVNListParentPath on
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /var/svn/svn-auth-file
Require valid-user
</Location>
并重新启动 httpd。