Apache2 mod_rewrite possível bug?

1

Eu tenho um diretório chamado 'foo' dentro da minha raiz do host virtual. Eu estou tentando interceptar pedidos de um arquivo inexistente também chamado 'foo' e reescrevê-los para um arquivo PHP, o arquivo .htaccess se parece com:

<IfModule mod_rewrite.c>
    RewriteEngine on   
    RewriteBase /
    RewriteCond %{REQUEST_URI} /foo
    RewriteRule ^(.*)$ router.php [L]    
</IfModule>

Tudo que eu recebo de volta do servidor em uma solicitação GET para '/ foo' é um redirecionamento 301 para '/ foo /' (o diretório). Por que o Apache está fazendo isso antes de processar as regras? Estou faltando uma opção de configuração? Ou isso não pode ser feito?

    
por olsgreen 05.05.2012 / 15:24

2 respostas

1

O redirecionamento 301 é proveniente da diretiva DirectorySlash que faz parte de mod_dir .

Eu suspeito que seu .htaccess não esteja funcionando devido a um ou ambos:

  1. Você tem AllowOverride configurado para não permitir .htaccess arquivos.
  2. O arquivo .htacess está dentro do diretório /foo/ , portanto, mod_dir aplica seu redirecionamento 301 antes que o arquivo .htaccess seja processado.
por 05.05.2012 / 15:42
1

Lembre-se de que o sistema de arquivos sempre requer precedência

O sistema de arquivos do seu servidor sempre terá precedência sobre o URL reescrito. Por exemplo, se você tiver um diretório chamado "foo" e dentro desse diretório for um arquivo chamado "router.php", não será possível redirecionar a URL para " link ”. O que acontece é que o Apache entra no diretório "foo" e não vê as instruções de reconfiguração.

Para corrigir isso, basta renomear seu diretório (adicionar um sublinhado ao início ou ao fim é uma maneira simples de fazer isso).

    
por 05.05.2012 / 15:42