我正在尝试在 Apache 中设置子域到存储库的翻译。例子:
foobars.domain.com -> /server/svnrepos/foobars
我试图用mod_rewrite完成这个:
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.domain\.com$ [NC]
RewriteRule ^/svn(.*) /svn/%2$1 [PT]
但是,这会导致基本的 svn 操作出现问题;'checkout' 导致了这件漂亮的事情:
$ svn co http://foobars.domain.com/svn
svn: '/svn/foobars/!svn/vcc/default' path not found
我在服务器设置(我的机器、操作系统等)方面没有任何限制。有没有办法让 Apache 处理这个翻译?我看过大量虚拟主机,但我看不到将概念扩展到 DAV 位置的方法(我希望有一个 VirtualSvnPath ......)。mod_dav_svn 强制您 1) 显式定义您的 svn repo 路径或 2) 定义父级的方式非常有限。
也许“SVNSpecialURI”可能会有一些用处,尽管我找不到任何关于它的文档......
假设我的最终目标是将子域映射到 SVNPath,我有哪些选择?
我当前的conf作为参考:
<VirtualHost *:80 *:443>
ServerAdmin admin@domain.com
DocumentRoot "/server/www"
ServerName domain.com
ServerAlias *.domain.com www.domain.com domain.com
ErrorLog logs/domain-error_log
CustomLog logs/domain-access_log common
DirectorySlash Off
RewriteLogLevel 9
RewriteLog /server/log/apache-rewrite.log
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.domain\.com$ [NC]
RewriteRule ^/svn$ /svn/ [QSA]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.domain\.com$ [NC]
RewriteRule ^/svn(.*) /svn/%2$1 [PT]
<Location /svn>
DAV svn
SVNParentPath /server/svn
</Location>