В интересах Open Source (ууу!) Я выложу свое решение. Я не нашел встроенного решения своей проблемы, поэтому я потратил несколько часов на исходники mod_dav_svn.so и предложил этот патч:
Index: subversion/mod_dav_svn/mod_dav_svn.c
===================================================================
--- subversion/mod_dav_svn/mod_dav_svn.c (revision 1049733)
+++ subversion/mod_dav_svn/mod_dav_svn.c (working copy)
@@ -426,9 +426,14 @@
dav_svn__get_fs_parent_path(request_rec *r)
{
dir_conf_t *conf;
+ char *tokens, *subdomain, *last_str;
conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
- return conf->fs_parent_path;
+
+ tokens = apr_pstrdup(r->pool, r->hostname); // copy hostname
+ subdomain = apr_strtok(tokens, ".", &last_str);
+
+ return (const char *) apr_pstrcat(r->pool, conf->fs_parent_path, "/", subdomain, NULL);
}
По сути, это захватывает текущее имя хоста (из ожидающего запроса 'request_rec'), вырезает первый токен (поддомен) и объединяет его с соответствующим SVNParentPath (conf-> fs_parent_path) и вуаля! Все работает как надо. Вот мой конфиг сервера (обратите внимание, как это просто сейчас):
<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
<Location /svn>
DAV svn
SVNParentPath /server/svn
SVNListParentPath on
</Location>
</VirtualHost>
Примечания:
Я надеюсь, что я правильно использовал функции apr_ *, если есть какие-то предостережения, я хотел бы получить отзыв:)
Проверено на Centos с последним деревом mod_dav_svn.