2011-08-15 5 views
0

.htaccess에서 두 개의 별도 브라우저 언어 기반 RewriteCond를 사용할 수 있습니까? 하나는 도메인 루트 용이고 다른 하나는 서브 도메인 'm'용입니다.루트 및 하위 도메인에 대해 .htaccess에 두 개의 별도 브라우저 언어 기반 RewriteCond를 사용할 수 있습니까

RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /index_cz.php [L,R=301] 

RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /m/index_cz.html [L,R=301] 

는 현재 첫 번째 규칙은 잘 작동하지만 언어 'CS'가 발견되면 두 번째 규칙은 루트 index_cz.php을 보여주는 대신에 기능 표시하지 않습니다. 어떤 아이디어? 감사!

답변

1
RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /index_cz.php [L,R=301] 

RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /m/index_cz.html [L,R=301] 

조건이 동일합니다. 아파치가 차이를 어떻게 감지해야하는지!
다른 언어를 사용하려면 조건을 변경하십시오!

편집 :

RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteCond %{HTTP_HOST} www\.domain\.com [NC] 
RewriteRule ^(.*)$ /index_cz.php [L,R=301] 

RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteCond %{HTTP_HOST} m\.domain\.com [NC] 
RewriteRule ^(.*)$ /m/index_cz.html [L,R=301] 
+0

하나는 조건을 루트에 적용하고 하나는 하위 도메인 'm.mydomain.com'에 적용하는 것이기 때문에 동일합니다 (폴더의 내용은/m /입니다). – JoeW

+0

@JoeW, ok 조건에 호스트 이름을 추가했습니다! 하지만 네가 다른 언어를 원한다고 말 했잖아! 내가 잘못 했니? – undone

+0

나는 조금 더 잘 설명 할 것이다. 먼저 사용자 브라우저가 체코 어 또는 영어로되어 있는지 검색하는 다시 쓰기 규칙이 있습니다. 이것은 이들을 index_cz.php (체코 어) 또는 index.php (영어)로 보냅니다. 그러나 사용자의 브라우저가 모바일 장치에있을 경우이를 감지하는 javasript도 있습니다. 그렇다면 우리는 사용자를 'm.domain.com'이라는 하위 도메인으로 보냈지 만 그렇지 않은 경우 평소처럼 root의 index.php로 보내집니다. 그러나 우리는 m.domain.com ... index_cz.html (체코 어)와 index.html (영어)의 두 가지 모바일 버전이 있습니다. 그것은 복잡합니다. 이번에는 더 잘 설명했으면합니다. – JoeW

1

규칙이 하나씩 구문 분석됩니다. 'L'지시 때문에, 조건이 충족 되 자마자 내 기억이 좋다면 다른 규칙은 검사되지 않습니다. 즉, 조건을 구분하기 위해 무언가를 추가해야합니다. 언제 다시 쓰기 규칙을 적용 하시겠습니까? 'm'은 모바일을 의미합니까? 당신은 하위 도메인에 대해 이야기하고 있습니다 ... 그렇다면 조건에서 하위 도메인도 확인해야합니다. 당신이 정말로 당신이 다음과 같은 규칙을 수 있습니다 녀 mant 무엇 'm'하위 도메인이있는 경우

:

RewriteCond %{HTTP_HOST} m.YourDomain.com [NC] 
RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /m/index_cz.html [L,R=301] 

RewriteCond %{HTTP_HOST} ([^.]+)\.YourDomain.com [NC] 
RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /index_cz.php [L,R=301] 

돈 '을 실제 도메인 이름으로 YourDomain.com을 대체하는 것을 잊지.

이 정보가 도움이됩니까?

+0

불행히도 첫 번째 조건은 하위 도메인에서 작동하지 않습니다. 두 번째 조건은 필요한대로 작동합니다. 어떤 아이디어? – JoeW

0

도메인 검사에서 일부 문자를 깜빡했습니다. 내가 쓴해야합니다

RewriteCond %{HTTP_HOST} ^m\.YourDomain\.com [NC] 
RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /m/index_cz.html [L,R=301] 

RewriteCond %{HTTP_HOST} ([^.]+)\.YourDomain\.com [NC] 
RewriteCond %{HTTP:Accept-Language} (cs) [NC] 
RewriteRule ^$ /index_cz.php [L,R=301] 

나는 도메인 이름에 기간을 탈출하고^모바일 하위 도메인의 시작 부분에 추가. 그 기호는 "시작"을 의미합니다.

영어에 대한 두 가지 추가 규칙 집합이 필요합니다.

관련 문제