mod_rewrite deve servir arquivos que existem no document root, mas está ignorando-os

1

Eu tirei a maior parte disso do Wordpress, então qualquer caminho no domínio como /search ou /list é direcionado para /index.php . Tudo bem que funciona.

No entanto, ele não deve fazer isso se o arquivo que está sendo solicitado existir na raiz do documento . Portanto, se eu solicitar /exists.php , ele deverá executar esse script. Em vez disso, ele está ignorando os arquivos no sistema de arquivos e continua a servir index.php .

<VirtualHost *:80>

  DocumentRoot /home/sites/dev
  ServerName dev.vbox

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule . /index.php

  ErrorLog /var/log/apache2/dev.error.log

</VirtualHost>

Eu passei pela documentação do mod_rewrite e vários resultados de pesquisa do Google, mas não o fiz. Não vejo nada de errado com as minhas condições de reescrita. Se o nome do arquivo solicitado for um arquivo ou um diretório, não redirecione para /index.php .

Eu tenho cd na raiz do documento e listei o conteúdo desse diretório, o arquivo que estou solicitando existe. Meu log de acesso do apache tem entradas para /exists.php .

A raiz do documento é um diretório montado que mora no meu Mac e a VM que atende a solicitação é a instalação do Ubuntu.

    
por Greg K 04.12.2010 / 23:48

2 respostas

0

Acabei adicionando outra condição de reescrita, então meu Virtualhost em funcionamento ficou assim:

<VirtualHost *:80>

  DocumentRoot /var/www/public_html
  ServerName domain.com

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !^.*\.(php)$ [nocase]
  RewriteRule . /index.php

</VirtualHost>
    
por 05.12.2010 / 19:37
1

Experimente %{LA-U:REQUEST_FILENAME} em vez de %{REQUEST_FILENAME} . O prefixo LA-U é necessário antes que o pedido seja mapeado para o sistema de arquivos.

Editar:

Não o peguei no meu primeiro passe, você também precisa mudar o primeiro argumento para RewriteRule assim:

<VirtualHost *:80>
    DocumentRoot /home/sites/dev
    ServerName dev.vbox

    RewriteEngine On
    RewriteCond %{LA-U:REQUEST_FILENAME} !-d
    RewriteCond %{LA-U:REQUEST_FILENAME} !-f
    RewriteRule .* /index.php

    ErrorLog /var/log/apache2/dev.error.log
</VirtualHost>
    
por 05.12.2010 / 00:44