2010-08-06 3 views
0

내 블로그 방문자를 프랑스어 또는 영어 버전으로 리디렉션하려고합니다..htaccess : 언어 리디렉션

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

#--------------------- 
# Language Redirection 
#--------------------- 
# Checking if the redirection didn't occur yet 
# Checking that the url doesn't begin with /en 
RewriteCond %{REQUEST_URI} !^/en(.*)$ 

# Checking if the user is in english 
RewriteCond %{HTTP:Accept-Language} ^en [NC] 

# Redirecting from /the/url to /en/the/url 
RewriteRule ^(.*)$ /en/$1 [L,R=301] 

#---------------------- 
# Wordpress Redirection 
#---------------------- 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

기본적으로, 나는 그들이 영어 경우/EN/내/문서 내/기사 /에서 구글에서 오는 내 방문자를 리디렉션 싶습니다 : 그래서 나는이 htaccess로했다. 대신 무한 루프가 있습니다! REQUEST_URI는 항상 마지막 RewriteRule 때문에 index.php라고 생각합니다.

누구도 이것을 한 적이 있습니까?

감사

답변

1

Accept-Language은 동등한 가치의 단지 목록이 아닙니다 많은; 그것은 오히려 각각의 값이 선호도를 0과 1 사이의 값으로 지정하는 품질 값을 가질 수있는 가중치 값의 목록입니다. 이는 하나의 특정 값이 발생했기 때문에 이것이이 값이 가장 선호되는 값이라는 것을 의미하지는 않습니다 . 실제로 품질 값 0은 "전혀 수용 할 수 없음"을 의미합니다.

그래서 특정 하위 문자열이 있는지를 보는 대신 가중치 값 목록을 구문 분석하고 선호 값과 사용 가능한 값이 가장 잘 일치하는지 확인해야합니다.

하지만 mod_rewrite는이 작업에 적합하지 않습니다. PHP와 마찬가지로 더 강력한 언어를 사용해야합니다.

+0

답장을 보내 주셔서 감사합니다. 기본적으로 사용자가 자신의 언어 목록 시작 부분에 영어를 입력하면 내 .htaccess의 RewriteCond가 채워져 리디렉션됩니다. –

+0

@Benjamin Netter : 시작시 en을 사용한다고해서 영어가 가장 선호되는 언어라는 의미는 아닙니다. 영어 이외의 다른 언어도있을 수 있습니다. 그렇다면 간단한 문자열 비교 이상의 것을 할 수있는 PHP와 언어 협상을 해보십시오. – Gumbo

+0

그건 내가 여기서하려고하는 것이 아닙니다. –