Apache ReWrite Condition Pensa que um diretório não é um diretório?

No meu server (Apache2, Ubuntu 10.04), o wpsa é um diretório na minha webroot. Ao acessair o url mysite.com/wpsa, um ReWriteRule que não deve ocorrer quando o file solicitado é um diretório, é executado de qualquer maneira.

Estas são minhas regras:

 RewriteCond %{REQUEST_URI} !^/index.php$ RewriteCond %{REQUEST_URI} !^/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* /000_ROUTE.php [L] 

Isso é do registro de reescrita:

 applying pattern '.*' to uri '/wpsa/' RewriteCond: input='/wpsa/' pattern='!^/index.php$' => matched RewriteCond: input='/wpsa/' pattern='!^/$' => matched RewriteCond: input='/wpsa/' pattern='!-f' => matched RewriteCond: input='/wpsa/' pattern='!-d' => matched rewrite '/wpsa/' -> '/000_ROUTE.php' local path result: /000_ROUTE.php 

Diz: "É" wpsa "um driectory?" -> "Não, não é". Mas é mesmo. Por que pensa que meu diretório não é um diretório?

Se eu adicionair:

 ReWriteRule ^/wpsa - [L,NC] 

Antes dessa regra, ele cairrega o diretório. Mas eu não deviewia ter que criair uma regra que não faça nada paira cada diretório, eu deviewia? Isso é o que as condições -f / -d são paira.

Seu webroot não é / (certo?), Então é correto que -d não tenha tido sucesso. Está tentando combinair /wpsa/ paira o sistema de files, literalmente – não relativo ao webroot.

A razão pela qual ele está dando você /wpsa/ como sua input de string em vez de /path/to/webroot/wpsa , o que funcionairia como esperado, é que você está usando %{REQUEST_FILENAME} no context incorreto.

Quando %{REQUEST_FILENAME} é usado em um context onde o mapeamento do sistema de files já está feito, como em um bloco <Directory> ou .htaccess , o path completo é retornado e -d funcionairá como você espera.

Dos documentos :

REQUEST_FILENAME

O path completo do sistema de files local paira o file ou script que corresponde ao request, se este já foi determinado pelo server no momento REQUEST_FILENAME é referenciado. Caso contrário, como quando usado no context do host virtual, o mesmo valor que REQUEST_URI.

Você pairece usá-lo em um context <VirtualHost> ou <Location> , o que o torna funcionalmente idêntico a %{REQUEST_URI} . Se você quiser mantê-lo nesse context, tente:

 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d