Também estou respondendo a isso, porque tenho certeza de que o problema está relacionado a como mod_dir.c
funciona internamente e eu acho que é um bug .
Se um recurso não puder ser mapeado para o sistema de arquivos local, a função fixup_dflt()
será executado, usando o FallbackResource
para determinar qual documento deve ser carregado.
No entanto, quando um recurso pode ser mapeado para o sistema de arquivos local e é um diretório, ele tentará resolver o documento executando fixup_dir()
; essa função percorre a lista de valores DirectoryIndex
até encontrar o primeiro documento adequado.
No meu caso, a configuração tem uma lista vazia de DirectoryIndex
valores, então fixup_dir()
falhará e um 404 será retornado.
O seguinte patch funciona para mim ( PR ):
static int dir_fixups(request_rec *r)
{
if (r->finfo.filetype == APR_DIR) {
- return fixup_dir(r);
+ if (fixup_dir(r) != OK) {
+ /* use fallback */
+ return fixup_dflt(r);
+ }
+
+ return OK;
}
else if ((r->finfo.filetype == APR_NOFILE) && (r->handler == NULL)) {
/* No handler and nothing in the filesystem - use fallback */
return fixup_dflt(r);
}
return DECLINED;
}
Ele basicamente tenta fixup_dflt()
depois que fixup_dir()
falhou.
Atualização 2015-04-21
Uma correção foi enviada ao projeto, programada para 2,5; pode ser portado para 2.4 também.
Atualização 2015-05-18
A correção foi revertida porque:
[...] it [at least] causes
FallBackResource
to kick in beforemod_autoindex
might have kicked in.
Ainda estou tentando descobrir como evitar esse tipo de situação.