Учитывая типичную конфигурацию Subversion / Apache с использованием SVNParentPath, с репозиториями, размещенными в /svn/
как это:
<Location /svn>
DAV svn
SVNParentPath /srv/source/svn/repos
SVNReposName "Subversion Repository"
AuthzSVNAccessFile /srv/source/svn/authz
Satisfy Any
AuthType Basic
AuthBasicProvider file
AuthName "Subversion Repository"
AuthUserFile /srv/source/svn/htpasswd
Require valid-user
</Location>
Есть ли способ переопределить эту конфигурацию для определенных репозиториев без нужно разместить их на другом пути? То есть есть ли способ добавить Location
блок вроде этого ...
<Location /svn/my_special_repo>
SVNPath /srv/source/svn/repos/my_special_repo
AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>
... и имейте это отменять конфигурация, представленная в Location
блок для /svn
? Мои попытки сделать это с указанной выше конфигурацией натолкнулись на странные и бесполезные ошибки в журнале ошибок Apache, например:
[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory
Похоже, что все это способ mod_dav_svn сказать мне, что я не могу делать то, что пытаюсь сделать. Я открыт для решений или альтернатив!
РЕДАКТИРОВАТЬ: Ну, я вижу, что этот вопрос вызвал большой интерес у читателей. Для записи, что я могу в конечном итоге сделать, так это создать конфигурации для каждого репозитория для всех наших существующих репозиториев, а затем отказаться от SVNParentPath
на основе конфигурации. Конфигурация Apache для каждого репо минимальна, особенно с использованием чего-то вроде mod_macro; сложная часть будет разделять глобальный файл authz. Если вы делали это раньше, мы будем благодарны за советы.
Мне неприятно видеть, как мой собственный вопрос томится там в списке неотвеченных вопросов, поэтому вот что мы сделали:
В нашей основной конфигурации сервера у нас есть:
<Location /svn/>
SVNParentPath /srv/source/svn/repos
</Location>
Мы приняли следующие mod_macro
чтобы воспроизвести это поведение для новых репозиториев:
<Macro LegacySubversionRepo $name>
# Override SVNParentPath block in main vhost config.
RewriteRule ^/svn/$name /repo/$name [PT]
<Location /repo/$name>
Order deny,allow
Allow from all
Use LdapAuth \
"$name svn repository" \
/srv/source/svn/htpasswd
DAV svn
SVNPath /srv/source/svn/repos/$name
AuthzSVNAccessFile /srv/source/svn/authz
SVNAutoversioning On
Satisfy Any
</Location>
</Macro>
В RewriteRule
позволяет конфигурации репозитория переопределить <Location /svn/>
в основной конфигурации, которая в противном случае соответствовала бы запросу.
Благодаря этому становится относительно легко адаптировать конфигурацию аутентификации и авторизации для каждого репозитория (вместо глобального htpasswd
файл, используемый здесь).