2009-06-06 3 views
0

경고 : 아니요, 전문가 나 웹 마스터 (교육 또는 무역) (C++ 개발자)이므로 매우 분명한 초보자 용 질문입니다. 사과.Apache가 하위 도메인 요청에 대한 도메인 요청을 다시 작성합니다.

요청한 도메인을 하위 도메인으로 우리 도메인에 매핑하는 Apache 2.x 다시 쓰기 규칙이 필요합니다.

간단한 예 (들) :

domain1.com/index.php?option=80  ->  domain1.masterdomain.com/index.php?option=80 
www.domain1.com/index.php?option=99 ->  domain1.masterdomain.com/index.php?option=99 
domain2.com/index.php?option=33  ->  domain2.masterdomain.com/index.php?option=33 
www.domain2.com/index.php?option=44 ->  domain2.masterdomain.com/index.php?option=44 

내가 제안 다양한 옵션을 시도,하지만 지금까지, 기쁨했습니다.

RewriteRule ([^.]+)\.com(.*) http://$1.masterdomain.com [L] 

참고 :이 특정 IP에 포트 80을 소유하고 가상 호스트에 살고, 그래서 다른 흥미로운 아무것도 내가 어떤이에 영향을 가지고 볼 수있는 가상 호스트에서 진행하지 최신 시도이다.

내 문제는 모두 내 정규식에 있다고 생각하지만 솔직히 말해서 나는 그것을 피합니다.

도움이 필요할 것입니다. 나는 Apache 문서와 내가 찾을 수있는 모든 Google 검색 팁을 연구했지만 지금은 보지 않고있다.

덕분에 ~

+0

실제로 이것은 아마도 ServerFault 유형의 질문 일 것입니다. –

답변

3

사실, 도메인 이름,만큼 "소스"와 "대상"도메인이 동일한 서버에서 처리를 다시 할 필요가 없습니다. 동일한 호스트를 참조하기 위해 여러 도메인의 별칭을 지정하기 만하면됩니다. 특히 : 지금은이처럼 보일 <VirtualHost> 블록이 있다고 가정 :

<VirtualHost *:80> 
    ServerName domain1.masterdomain.com 
    # other rules 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName domain2.masterdomain.com 
    # other rules 
</VirtualHost> 

아래 그림과 같이 당신이 ServerAlias 지시어를 추가하기 만하면됩니다 :

<VirtualHost *:80> 
    ServerName domain1.masterdomain.com 
    ServerAlias domain1.com 
    ServerAlias www.domain1.com 
    # same other rules as before 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName domain2.masterdomain.com 
    ServerAlias domain2.com 
    ServerAlias www.domain2.com 
    # same other rules as before 
</VirtualHost> 

이 아파치 핸들을 만들 것입니다 domain1.comwww.domain1.com 도메인 이름은 domain1.masterdomain.com과 동일한 방식으로 처리됩니다.

+0

놀랍도록 좋은 아이디어! 이것은 정규식 리디렉션이 실제로 필요하지 않은 대부분의 시간을 의미합니다. –

+0

예, 실제로 mod_rewrite를 _ 필요로하는 경우는 매우 드뭅니다. 적어도 사람들은 그것을 과용하는 경향이 있습니다. –

0

빠른 답장을 보내 주셔서 감사합니다. 실제로 VirtualDocumentRoot 지시문을 활용하여 모든 사이트를 처리하는 단일 VHost (모두 동일한 구조이므로)가 있습니다. 원하는 경우 전체 VHost 항목을 게시 할 수 있지만 내 질문에 대한 과잉 될 것이라고 생각.

나는 이전 게시물 이후 진전을 보였습니다. 다음은 브라우저 url을 업데이트하지만 원하는대로 다시 쓰기를 실행하며 사용자가 내부적으로 리디렉션되었음을 사용자에게 알리는 것은 아닙니다.

RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.com$ [NC] 
RewriteRule ^(.*)$  http://%2.masterdomain.com$1 

브라우저 URL을 업데이트하는 이유가 확실하지 않습니다. 규칙 줄 끝 부분에 [R]을 명시 적으로 추가하는 경우에만 읽는 것으로 생각했습니다. 궁극적으로 브라우저는 여전히 test1.com/index.php?id=5를 표시해야하지만 내부적으로 cgi는 test1.masterdomain.com/index.php?id=5를 수신합니다.

유용 할 수도있는 또 다른 데이터 요소 인 rewrite.log에서 일치 후 리디렉션 (rc = 302)이 암시 적으로 실행되고 있음을 알 수 있습니다. 여기에 중요한 두 줄이 있습니다.

implicitly forcing redirect (rc=302) with http://test1.masterdomain.com/index.php 
redirect to http://test1.masterdomain.com/index.php?id=5 [REDIRECT/302] 

모든 의견/제안을 부탁드립니다.20 년 이상 C++,하지만 아파치와 함께 1 주일 만에 매우 어려움을 겪고있는 초보자.

-wb

P.S. 잠긴 웹 응용 프로그램에 대한 코딩 요구 사항으로 인해 실제로 xgi.masterdomain.com이 될 수있는 URL이 필요합니다. (긴 이야기, 아니요. 내 선택 또는 접근 방식으로, 문제를 해결하려고 노력했습니다. 고도로 제약 된 요구 사항이 주어졌습니다 .... 또한, 위생적인 ​​데이터에 대한 사과 - 온 - 고지에서의 지시에 따라 - 미소 -) 다시 한번 감사드립니다!