2011-11-27 4 views
0

스웨덴어를 제외한 모든 사용자를 내 사이트의 영어 사이트로 리디렉션하려고하지만 기본적으로 스웨덴어 브라우저에 영어와 스웨덴어가 모두 설치되어 있기 때문에 모두 영어로 리디렉션됩니다. 이중 언어 브라우저 리디렉션

Swedish : xyz.com 
English : xyz.com/?lang=en 

이 코드에 도움을 얻고 그것은 작동하지만 enlish와 스웨덴어 브라우저

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|l o|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.xyz.com/$1?lang=%1 [L] 

이 내가 할 수있는 방법이 있으므로 모든 브라우저가 xyz.com/?lang=en에 있지만, 스웨덴어 예외로 리디렉션됩니다 설치하는 xyz.com에 머무를 것인가?

+1

내가 당신의 [다른 질문] (http://stackoverflow.com/questions/8130103/htaccess-language-redirect-310-error)에서 말했듯이, 당신이 뭔가 복잡한 일을한다면, .htaccess는 부족한 것. –

+0

존, previouse 게시물에 도움을 주셔서 감사합니다, 내 부족한 기술로 인해 나는 왜 htaccess에 대한 복잡 한 귀찮은 것을 이해할 수 없습니다. 그것은 SV를위한 언어 예외가있는 일반적인 redirecton일까요? – user1046583

+0

지난 질문에 대한 내 의견에 따르면 .htaccess에는 조건부 논리가 없습니다. 예를 들어 .htaccess에는 "if/then/else"가 없습니다. ** Accept-Language ** 헤더를 구문 분석하고 실제로 제공 할 언어에 대한 충분한 정보를 바탕으로 의사 결정을 내리고 있습니다. ** mod_rewrite를 사용하여 ** 수행 할 수 없습니다. –

답변

-1

아마도 언어에 스웨덴어가 포함되어 있지 않은지 확인하는 규칙을 추가해야합니다. 스웨덴어 브라우저에 "스웨덴어 및 영어"가 있다고 가정 할 수 있을까요?

또 다른 옵션은 스웨덴 언어를 확인하고 [L] 옵션을 사용하여 동일하게 "다시 작성"한 다음 lang 변수 다음에 줄을 추가하는 것입니다.

RewriteEngine on 
RewriteCond %{QUERY_STRING} !(&|^)lang= 
RewriteCond %{HTTP:Accept-Language} (se) [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L] 
RewriteRule ^(.*)$ http://www.example.com/$1?lang=%1 [L] 
+0

좋은 생각이지만 'accept-language'는 결코 'se'로만 구성되지 않습니다. (이유에 대한 내 대답을 참조하십시오) –

+0

죄송합니다, cognn't 일하러 가야 ... 나는 310 (그물 :: ERR_TOO_MANY_REDIRECTS) – user1046583

+0

작동하도록 코드를 수정하려고 노력 해왔다하지만 난 질수 없어 보인다 리다이렉션 루프. 기본 페이지를 /? lang = en으로 설정하고 sv 만 xyz.com으로 다시/리다이렉트 할 수 있습니까? – user1046583

1

accept-language string 복잡한 짐승 - 그것은 여러 값을 포함 할 수 있습니다 그들 각각은 또한 여러 가지 방법으로 쓸 수

se, en-gb;q=0.8, en;q=0.7 

을 :

se, se-SE, se-FI, se-EE // Swedish in .... Sweden, Finland, Estonia 

이론적으로 동안 귀하의 요구 사항은 확실하게 정규식에 반영 될 수 있습니다. 일반적으로 최선의 서버 측 언어로 이루어져 있습니다. 예를 들어 accept-language을 구문 분석 할 수있는 기성 라이브러리가 필요하며 리디렉션을 할 수있는 기반으로 2 자 언어 문자열로 줄일 수도 있습니다.

+0

내 두 센트 : 복잡한 Accept-Language 처리가 실제로 .htaccess 외부에서 가장 잘 수행되는 반면, OP의 요청은 너무 간단하여 .htaccess에서 처리하지 않을 이유가 없습니다. .htaccess는 _simulate_ if-then-else를 완벽하게 수행 할 수 있습니다 (OP의 순서는 이미이 방법 중 하나를 수행합니다). 그리고 부분 문자열 (전체 문자열이 아님)과 쉽게 일치 할 수 있습니다. 모든 OP 요구 사항은 다음과 같습니다 : RewriteCond % {QUERY_STRING} \ blang = en [OR] - RewriteCond % {HTTP : Accept-Language}! \ bse \ b - RewriteRule ... 영어 버전 –