mod_perl 自定义配置指令放在 .htaccess 中时不起作用,并且存在

mod_perl 自定义配置指令放在 .htaccess 中时不起作用,并且存在

我正在尝试完成 Redmine 的功能请求#2693:使用 Redmine.pm 对任何目录进行身份验证(1). 我对这些东西不太了解,需要帮助。Redmine 使用mod_perl模块Redmine官方博客用于身份验证和授权。此模块定义了几个自定义配置指令。我已成功修改了 (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>可见。

据我所知,指令应该合并。我遗漏了什么吗?

答案1

我发现 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);
}

相关内容