我试图完成Redmine的function请求#2693:使用Redmine.pm来validation任何目录 (1)。 我对这些事情没有太多的知识,需要帮助。 Redmine使用mod_perl模块Redmine.pm进行authentication和授权。 该模块定义了几个自定义configuration指令。 我已经成功修改了(1)中的修补程序,并且在所有configuration位于<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>
但是当我在.htaccess文件中移动这些指令( RedmineProject ,见(1))时,Redmine.pm没有看到它! 我尝试将<Location>更改为<Directory>并添加AllowOverride All 。 .htaccess指令是可见的,但来自<Directory>其余指令不是。 我不想将所有指令移到每个.htaccess 。 除了<Directory> ,再添加<Location>时,只有<Location>中的指令是可见的。
据我所知,指令应该合并。 我想念什么?
我发现Redmine.pm不提供DIR_MERGE函数来合并configuration对象。 请参阅mod_perl手册的“ 创build和合并configuration对象”部分中的详细信息。 我简化了给出的例子,因为我只需要覆盖模式:
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); }