Я пытаюсь выполнить запрос функции Redmine # 2693: Использовать Redmine.pm для аутентификации в любом каталоге (1). У меня мало знаний обо всем этом, и мне нужна помощь. Redmine использует mod_perl
модуль Redmine.pm для аутентификации и авторизации. Этот модуль определяет несколько настраиваемых директив конфигурации. Я успешно модифицировал патч из (1), и он работает, когда вся конфигурация находится в <Location>
:
<Location /digischrank/test>
AuthType basic
AuthName "Digischrank Test"
Require valid-user
PerlAccessHandler Apache::Authn::Redmine::access_handler
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
RedmineDSN "DBI:mysql:database=SomedaTaBAse;host=localhost"
RedmineDbUser "SoMeuSer"
RedmineDbPass "SomePaSS"
RedmineProject "digischrank"
</Location>
Но когда я перемещаю одну из этих директив (RedmineProject
, см. (1)) в .htaccess
файл, Redmine.pm его не видит! Я пытался изменить <Location>
к <Directory>
и добавить AllowOverride All
. Директивы от .htaccess
видно, но оставшиеся от <Directory>
- нет. Я не хочу переносить все директивы в каждую .htaccess
. Когда я добавляю <Location>
в дополнении к <Directory>
, опять же - только директивы от <Location>
видны.
Насколько я знаю, директивы надо объединять. Я что-то упускаю?
Я обнаружил, что Redmine.pm не предоставляет функцию DIR_MERGE для объединения объектов конфигурации. См. Подробности в Создание и объединение объектов конфигурации раздел mod_perl
руководство. Я упростил данный пример, потому что мне нужен только режим переопределения:
sub DIR_MERGE { merge(@_) }
sub merge {
my ($base, $add) = @_;
my %mrg = ();
for my $key (keys %$base, keys %$add) {
next if exists $mrg{$key};
# override mode
$mrg{$key} = $base->{$key} if exists $base->{$key};
$mrg{$key} = $add->{$key} if exists $add->{$key};
}
return bless \%mrg, ref($base);
}