Código de erro Mod_Rewrite: ERR_TOO_MANY_REDIRECTS

Código de erro Mod_Rewrite: ERR_TOO_MANY_REDIRECTS

Eu sei que muitas pessoas postaram sobre esse erro, mas ainda não consegui resolvê-lo. Então é por isso que começo um novo post com ele.

Conforme declarado no título, encontro um loop de redirecionamento ao acessar minhas páginas no site.

Aqui está minha configuração de reescrita.

RewriteCond %{HTTP_REFERER} ^http://example\.com/test/store\.do [NC]
RewriteRule (.*)$ /test/$1 [R]

Então, como resolvo esse erro de redirecionamento?

[Fri May 16 12:18:20.345204 2014] [rewrite:trace3] [pid 29462:tid 1193511232] mod_rewrite.c(475): [client 172.16.28.96:60187] 172.16.28.96 - - [example.com/sid#1e84d1c0][rid#1e954910/initial] applying pattern '(.*)$' to uri '/test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test/ /store.do', referer: http://example.com/test/store.do
[Fri May 16 12:18:20.345213 2014] [rewrite:trace4] [pid 29462:tid 1193511232] mod_rewrite.c(475): [client 172.16.28.96:60187] 172.16.28.96 - - [example.com/sid#1e84d1c0][rid#1e954910/initial] RewriteCond: input='http://example.com/test/store.do' pattern='^http://example\\.com/test/store\\.do' [NC] => matched, referer: http://example.com/test/store.do
[Fri May 16 12:18:20.345218 2014] [rewrite:trace2] [pid 29462:tid 1193511232] mod_rewrite.c(475): [client 172.16.28.96:60187] 172.16.28.96 - - [example.com/sid#1e84d1c0][rid#1e954910/initial] rewrite '/test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//whatshot_v3/hahah/store.do' -> '/test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//store.do', referer: http://example.com/test/store.do
[Fri May 16 12:18:20.345233 2014] [rewrite:trace2] [pid 29462:tid 1193511232] mod_rewrite.c(475): [client 172.16.28.96:60187] 172.16.28.96 - - [example.com/sid#1e84d1c0][rid#1e954910/initial] explicitly forcing redirect with http://example.com/test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test/ /store.do, referer: http://example.com/test/store.do
[Fri May 16 12:18:20.345239 2014] [rewrite:trace1] [pid 29462:tid 1193511232] mod_rewrite.c(475): [client 172.16.28.96:60187] 172.16.28.96 - - [example.com/sid#1e84d1c0][rid#1e954910/initial] escaping http://example.com/test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//store.do for redirect, referer: http://example.com/test/store.do
[Fri May 16 12:18:20.345245 2014] [rewrite:trace1] [pid 29462:tid 1193511232] mod_rewrite.c(475): [client 172.16.28.96:60187] 172.16.28.96 - - [example.com/sid#1e84d1c0][rid#1e954910/initial] redirect to http://example.com/test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//test//store/store.do [REDIRECT/302], referer: http://example.com/test/store.do

Aqui está meu arquivo de log.

Obrigado.

Responder1

Se possível, a melhor solução é provavelmente alterar as referências a outros recursos para incluir o /test/em vez de hackeá-lo no mod_rewrite.

Mas isso deve funcionar:

RewriteCond %{HTTP_REFERER} ^http://example\.com/test/store\.do [NC]
RewriteRule ^/test - [L]
RewriteCond %{HTTP_REFERER} ^http://example\.com/test/store\.do [NC]
RewriteRule ^/(.*)$ /test/$1 [L]

Observe que não há redirecionamento, pois não há motivo para fazer com que o cliente envie uma solicitação extra para cada um dos recursos, embora isso ainda deva funcionar.

Responder2

Ao tentar depurar RewriteRules, a melhor coisa a fazer é ativar o log de reescrita e aumentar o nível de rewritelog. Isso exibirá a solicitação recebida e a aprovação/reprovação de cada regra, bem como o que faz com a solicitação quando ela corresponde a uma regra.

RewriteLog "/usr/local/var/apache/logs/rewrite.log"
RewriteLogLevel 3

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteloglevel

Lembre-se de desabilitar isso quando terminar, pois isso causa um impacto no desempenho, especialmente em 3 e acima.

informação relacionada