2009-08-27 5 views
1

최근에 mod_rewrite 모듈의 성능을 발견했으며 도움이 필요합니다. mod_rewrite : HTTP_HOST에 따라 GET 설정

example.com 
example.net 

... 나도 같은 호스트에 두 개의 도메인 이름 매핑이있는 웹 사이트가 말해 내가이 (가) HTTP_HOST에 따라 GET의 VAR을 설정하려는 (예 : .com 또는 .net ?) ...

/index.php?lang=en 
/index.php?lang=es 

주의 할이 ...이다 나는 이미 3 개의 RewriteRules ...

RewriteRule ^(about|contact)/?$ /index.php?page=$1 [NC] 
... 
.. 

그리고 나는 경우가 그러나 here (RewriteCond의 맨 아래)의 예제를 따라야했다. 각 HTTP_HOST에 대해 3 개의 RewriteRules를 복사해야한다. .com OR .net). GET var를 정적으로 추가하십시오. & lang = en OR & lang = es 그리고 각 규칙의 끝 ...

3 개의 규칙을 모두 다시 복사하지 않고도 자동으로이 작업을 수행 할 수있는 방법이 있습니까? 종료?

추신. 스크립팅 언어를 통해이 작업을 수행 할 수 있다는 것을 알고 있지만 mod_rewrite를 통해이 작업을 수행 할 수 있는지 궁금합니다.

thanx! 다른 모든 규칙 전에이 같은 퍼팅

답변

2

시도 :

RewriteCond %{HTTP_HOST} .com$ 
RewriteRule ^(.*)$ $1?lang=en [QSA] 
RewriteCond %{HTTP_HOST} .net$ 
RewriteRule ^(.*)$ $1?lang=es [QSA] 

각 가상 호스트에서 다른 언어로 SetEnv 지시어를 사용하여 언어를 지정하는 환경 변수를 사용하여 더 나을 수도 있지만.

mod_negotiation에는 언어 처리를위한 표준 기능이 포함되어 있습니다.

+0

QSA 플래그가 유망한 것으로 확인됩니다. –

+0

제출 된 코드는 큰 도움이되었지만 그 코드는 쓸모가 없습니다. 이미 설정되어 있어도 아파치가 각 페이지를 lang = en | es로 리다이렉트하기 때문에 무한 재귀가 남을 것입니다 .. 그래서 RewriteCond % {QUERY_STRING}! (lang 이미 설정되어있는 경우 lang = en | es로 리디렉션되지 않음) –

+0

나중에 규칙 다시 쓰기 프로세스를 다시 시작하지 않으면 무한 재귀가 발생하지 않아야합니다. 귀하의 질문에 나는 당신이 그렇게하지 않았다고 믿었습니다. –

관련 문제