2012-03-11 3 views
0

왜 리디렉션 루프가 발생합니까? 어떻게 작동하도록 코드를 변경해야합니까?htaccess의 루프 리디렉션

RewriteEngine On 
RewriteCond %{HTTP:Accept-Language} de [NC] 
RewriteCond %{QUERY_STRING} !^___store [NC] 
RewriteRule ^$ http://website.com/?___store=german [L] 

RewriteCond %{HTTP:Accept-Language} nl [NC] 
RewriteCond %{QUERY_STRING} !^___store [NC] 
RewriteRule ^$ http://website.com/?___store=dutch [L] 

당신이 '드'의 AL과 website.com에 가면, 다음은 __store하는 리디렉션 :

RewriteEngine On 
RewriteCond %{HTTP:Accept-Language} de [NC] 
RewriteRule ^$ http://website.com/?___store=german 
RewriteCond %{HTTP:Accept-Language} nl [NC] 
RewriteRule ^$ http://website.com/?___store=dutch 

답변

0

이 시도

토비을 주셔서 감사합니다 = german이라면 AL은 여전히 ​​'de'일 것이므로 계속해서 __store = german으로 리디렉션하려고합니다. [L] 플래그를 추가하면 아파치가 여러 번 리디렉션하지 못하게됩니다.

___store 매개 변수는 수락 언어와 같아야하지만 이것은 다른 옵션입니다. 나는이

RewriteEngine On 
RewriteCond %{HTTP:Accept-Language} (de|nl) [NC] 
RewriteCond %{QUERY_STRING} !^___store [NC] 
RewriteRule ^$ http://website.com/?___store=%1 [L] 
+0

감사합니다.하지만 여전히 작동하지 않습니다. 아직 루핑 중이 야. – user1262190

+0

요청은 계속해서 ('http : //'로 인해) 리디렉션되고 ** Accept-Langage **가 다시 일치합니다. 다시 리디렉션되며 다시 일치 할 것입니다. –

+0

흥미 롭습니다. 그 마지막 규칙에서 멈추었을 것이며 다시 작성하려고 시도하지 않았다고 생각했습니다. 내 대답은 업데이트되었지만, LOL은 완전히 다른 응답을 알지 못했습니다. ㅎ. 거기에 전에 wasnt 한 o_o – Benno

1
RewriteEngine On 

RewriteCond %{QUERY_STRING}   !\b___store=\w+\b 
RewriteCond %{HTTP:Accept-Language} de [NC] 
RewriteRule ^$      /?___store=german [L,QSA] 

RewriteCond %{QUERY_STRING}   !\b___store=\w+\b 
RewriteCond %{HTTP:Accept-Language} nl [NC] 
RewriteRule ^$      /?___store=dutch [L,QSA] 

당신은 http://website.com 필요하지 않습니다 (조건에서 통과 변수의 세부 사항에 정확히 확인되지 않음) 작동한다고 생각합니다. .htaccess 파일 루프가 추가되어 [L]을 (를) 추가하는 것으로 충분하지 않습니다. 루프를 감지하고 저장소 매개 변수를 찾는 것이 좋습니다. 일부 요청에서 추가 매개 변수를 사용하는 경우 [QSA] 플래그가 필요합니다.

+0

좋아, 잘 된 것 같다! 고마워요! :) 방문이 다른 언어 인 경우 어떻게되는지 확실하지 않습니다. 어떤 버전을 사용합니까? 표준은 nl이어야합니다. 감사. – user1262190

+0

아직도 버그가 있다고 생각합니다. 이제는 항상 버전이 로딩됩니다. 기본 브라우저 언어를 NL로 전환해도 DE 버전이로드됩니다. – user1262190

+0

Accept-Language 헤더는 목록입니다. 네가 어떻게 설정되어 있는지 모르겠다. phpinfo() 스크립트를 수행하고 HTTP_ACCEPT_LANGUAGE를 찾습니다. 순서가 중요 할 수도 있습니다. 예 : 'nl, de'은 당신이 제안하는 증상을 줄 것입니다. '^ de'와'^ nl'을 일치 문자열로 시도 할 수 있습니다.하지만이 방법은'fr, de'에서 실패합니다. – TerryE