Mod_Rewrite 오류 코드: ERR_TOO_MANY_REDIRECTS

Mod_Rewrite 오류 코드: ERR_TOO_MANY_REDIRECTS

많은 사람들이 이 오류에 대한 게시물을 갖고 있다는 것을 알고 있지만 여전히 문제를 해결할 수 없습니다. 이것이 바로 제가 해당 오류에 대한 새 게시물을 시작하는 이유입니다.

제목에 명시된 대로 웹사이트에서 내 페이지에 액세스할 때 리디렉션 루프가 발생합니다.

여기 내 재작성 구성이 있습니다.

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

그렇다면 이 리디렉션 오류를 어떻게 해결합니까?

[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

여기 내 로그 파일이 있습니다.

감사해요.

답변1

/test/가능하다면 가장 좋은 해결책은 mod_rewrite에서 해킹하는 대신 다른 리소스에 대한 참조를 변경하여 포함하는 것입니다 .

하지만 다음과 같이 하면 작동합니다.

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]

클라이언트가 각 리소스에 대해 추가 요청을 보내게 할 이유가 없기 때문에 리디렉션되지는 않지만 여전히 작동해야 합니다.

답변2

RewriteRules를 디버그하려고 할 때 가장 좋은 방법은 다시 쓰기 로그를 켜고 rewriteloglevel을 높이는 것입니다. 그러면 들어오는 요청과 각 규칙의 통과/실패는 물론 규칙과 일치할 때 요청에 대한 작업이 표시됩니다.

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

특히 3 이상에서는 성능 저하가 발생하므로 작업을 마친 후에는 이 기능을 비활성화하는 것을 잊지 마십시오.

관련 정보