O que faz com que meu arquivo .htaccess seja executado várias vezes em uma única solicitação?

2

Eu entendo, tanto quanto o que está acontecendo com o meu código, porque estou obtendo um loop infinito. Então eu tenho o seguinte:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^foo/?([^/]+)?/?(.+)? /foo.php?bar=$1&baz=$2 [L,NC]
</IfModule>

Então, o que está acontecendo é que o usuário está chegando em foo (ou foo/a/b ) e sendo redirecionado para foo.php?bar=$1&baz=$2 . Mas neste momento (e é aí que eu sei que preciso de uma explicação mais completa, já que tenho certeza que é por design) o arquivo .htaccess está sendo reexecutado em foo.php?bar=$1&baz=$2 , que corresponde à minha regra e entra em um infinito loop. Mas eu não sei por que isso está sendo reexaminado pelas minhas regras.

O que é que eu não entendo sobre o .htaccess RewriteRule s?

PS: Eu resolvi esse problema imediato colocando os seguintes comandos antes da regra, mas gostaria de saber por que posso resolver o problema no futuro (e assim posso remover essas linhas e fazer outras coisas). / p>

RewriteCondition %{REQUEST_FILENAME} !-f
RewriteCondition %{REQUEST_FILENAME} !-d
    
por Ktash 11.02.2012 / 02:55

2 respostas

1

A primeira solicitação é processada e o URL é reescrito. Isso resulta em uma nova solicitação para o novo URL. Sem alguma forma de filtrar as solicitações (veja a resposta de Devin), o que você está vendo é o comportamento correto.

    
por 11.02.2012 / 04:34
1

É comum precisar de um RewriteCond antes de um RewriteRule, para não corresponder ao URL reescrito e evitar um loop infinito. Esse é um dos usos mais comuns do RewriteCond. Você deve se sentir bem em descobrir isso, e não sentir que está fazendo algo errado ao usá-lo dessa maneira.

    
por 11.02.2012 / 04:22