使用 SVN 重写 URL

使用 SVN 重写 URL

我目前设置了几个 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

前言

  1. 你的书面配置没有反映你的描述配置:/svn路径与/var/svn/位置
  2. 您的配置一定不能工作(或与大麻烦): DocumentRoot == Location == SVNParentPath,因为它们 a) 不相关 b) 不同的参数

当你想改变你的仓库路径时,你只需要重写 SVN 位置的定义,在你的情况下它可以是 / (并且注意:在这种情况下,根下的非 WebDAV 树会出现问题,如果所有站点都是仓库,那么只有根位置才可以)

<Location />对你的问题的简短回答

答案2

假设 您有两个 svn 存储库,位于:

  1. /var/svn/repo1
  2. /var/svn/repo2

因此 URL 将会是:

  1. http://svn.example.com/repo1/project1/PackageA
  2. http://svn.example.com/repo2/project1/PackageA

要求PackageA使用Project1URL 访问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。

相关内容