当打开如下的 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>