使用 WebSVN 作为默认 HTML 视图

使用 WebSVN 作为默认 HTML 视图

当打开如下的 subversion URL 时https://server.local/svn/reproname使用普通的网络浏览器,我得到一个(不是很好但很有用)的网页,其中显示了存储库中最高修订版的文件。

是否可以将此 HTML 视图更改为使用 WebSVN?因此,我想对 TortoiseSVN 使用相同的 URL,然后使用 WebDAV 浏览存储库,并使用 Web 浏览器浏览它,获得 WebSVN 的良好界面。

我在 Win 2003 Server 上使用带有 mod_dav_svn 的 Apache 2.2。

在此先感谢您的帮助。

sc911

答案1

那么使用 mod_rewrite 怎么样?你可以这样做:-

RewriteCond %{HTTP_USER_AGENT}          !^SVN.*
RewriteRule ^/svn/(.*?)(/.*)$           http://websvn.host/websvn/listing.php?repname=$1&path=$2      [R]

这应该会将没有以“SVN/”开头的 User-Agent 字符串的任何客户端重定向到 WebSVN 安装http://websvn.host/websvn/,并且不理会来自 SVN 客户端的查询。

答案2

我也尝试过让它像这样工作,但我认为这是不可能的。根据站点,mod_dav_svn 生成您看到的 html 页面,并且它仅支持使用 xslt 进行简单的换肤。

我所做的是为我的 WebSVN 内容使用一个新的虚拟主机(例如https://websvn.server.local/svn/reponame)。

答案3

按照 Andy 的建议,用 mod_rewrite 解决了这个问题。我现在正在使用这套规则

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^SVN.*
RewriteRule (.*) - [S=3] 
RewriteRule ^svn$ /svn/ [R,N]
RewriteRule ^svn/$ /websvn/ [R,L]
RewriteRule ^svn/(.*?)(/.*)$ /websvn/listing.php?repname=$1&path=$2 [R,L]

这将检查 User-Agent 是否以 SVN 开头(这是 Tortoise 的识别方式),然后跳过接下来的三个规则。

这三条规则的作用如下:

  • 在 svn-URL 中添加尾部斜杠(不会自动完成,因为 svn 没有目录)
  • 将直接访问重定向到存储库列表
  • 重定向直接存储库视图

所有这些都是在<Directory>RootDir 的指令中完成的。

感谢安迪的提示!

sc911

答案4

我终于完成了这项工作,但它花费的时间比其他人建议的要多得多。

我找到:

  • TortoiseSVN 和 SVN 仅对 301 做出反应:“永久移动”。

  • TortoiseSVN 谎称其用户代理与“Mozilla 兼容”

  • TortoiseSVN 放置会影响未来访问的 cookie(妨碍测试)

    RewriteEngine On
    
    #If it is not tortoise/SVN skip the next rule
    RewriteCond %{HTTP_USER_AGENT} !^SVN.*
    RewriteCond %{HTTP_USER_AGENT} !^.*Mozilla/4.*compatible.*
    RewriteRule (.*) - [S=1]
    
    #Here it is tortoise/SVN we map / to /svn
    RewriteCond %{REQUEST_URI} !/svn.*
    RewriteRule ^/(.*)$ /svn/$1 [R=301,L]
    
    #If it is not tortoise/SVN then it's a real browser, point to index
    #then redirect / to /opt/websvn
    RewriteCond %{HTTP_USER_AGENT} !^SVN.*
    RewriteCond %{HTTP_USER_AGENT} !^.*Mozilla/4.*compatible.*
    RewriteCond %{REQUEST_URI} !/websvn.*
    
    RewriteRule ^/$ /opt/websvn/index.php
    
    #Redirect websvn/repos/path to listing.php
    RewriteRule ^websvn/(.*?)(/.*)$ /websvn/listing.php?repname=$1&path=$2 [R,L]
    
    Alias /websvn /opt/websvn
    <Directory /opt/websvn>
            Options +ExecCGI
            AddHandler cgi-script .php
            DirectoryIndex index.php
    </Directory>
    
    <Location /svn>
            DAV svn
            SVNParentPath /var/lib/svn
            SVNListParentPath On
    </Location>
    

相关内容