2011-11-15 2 views
0

나는 두 언어의 사이트 나는 www.site.com/?lang=en에 모든 언어를 얻으려면 htaccess로 언어 리디렉션 (310) 오류

RewriteEngine on 
RewriteCond %{HTTP:Accept-Language} (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy|ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo|zh|zu) [NC] 
RewriteRule .* www.site.com/?lang=en [L] 

를 사용하지만, 스웨덴어하고 있습니다

Swedish side www.site.com 
English side www.site.com/?lang=en 

을 가지고 있지만 나는 310 루프 끝. 무엇이 누락 되었습니까?

답변

1

반복하지 않으려면 lang에 대한 검사를 추가해야합니다. %1 이전한다 RewriteCond에 일치하는 두 자리 언어 코드에 대한 역 참조입니다

RewriteEngine on 
RewriteCond %{QUERY_STRING} !(&|^)lang= 
RewriteCond %{HTTP:Accept-Language} (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy|ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo|zh|zu) [NC] 
RewriteRule .* http://www.site.com/?lang=%1 [L] 

참고. 주목할 규칙에 대한 또 다른 사항은 /something/file.html과 같은 요청이 http://www.site.com/?lang=(2 letter language code)으로 리디렉션된다는 것입니다. 기본적으로 원래 경로는 손실됩니다. 당신이 그것을 유지하려는 경우, 당신은 일치 역 참조 사용할 필요가 : 당신이 이전 쿼리 문자열도 통과 얻을하려는 경우 예를 들어, /something/file.php?a=b을 위해, 당신은 괄호 안에 QSA을 추가해야

RewriteRule ^(.*)$ http://www.site.com/$1?lang=%1 [L] 

을 있도록 http://www.site.com/somthing/file.php?lang=(2 letter language code)&a=b으로 리디렉션됩니다.

+0

감사합니다. 코드는 훌륭하게 작동하지만 파이어 폭스와 크롬은 스웨덴어와 영어가 모두 영어로되어 있다는 것을 깨달았습니다. 이 코드를 피하려면 어떤 코드가 필요합니까? – user1046583

+0

RewriteCond는 "en"및 "eng"와 일치해야하며 "en"부분 만 사용해야합니다. –

+0

는 이해하지 못합니다. 가장 스웨덴 브라우저에는 en과 sv라는 두 가지 언어가 있습니다. HTTP : Accept-Language가 영어를 하나의 설치된 언어로 탐지하기 때문에 스웨덴 사용자를 /lang=en으로 리디렉션 할 수 있습니다. 더 나은 해결책은 www.site.com 전체를 www.site.com/lang=en으로 리디렉션하지만 추가하는 것입니다. sv 언어에 대한 예외. 하지만이게 최선의 방법인지 모르겠다. 나는 그것을 쓰는 법을 모른다. – user1046583