Назад | Перейти на главную страницу

mod_perl custom configuration directives don't work when placed in .htaccess and there is <location></location>

Я пытаюсь выполнить запрос функции 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);
}