2009-04-16 5 views
59

URL이 app1.example.com, example.com*.example.com 인 경우 모두 다른 가상 호스트를 사용하는 경우가 있습니다. 이것은 내가 가지고있는 것입니다 (example.com 제외).와일드 카드 하위 도메인 및 정적 하위 도메인 용 가상 호스트

<VirtualHost *> 
    ServerName app1.example.com 
    ServerAlias app1.example.com 

    DocumentRoot = /var/www/app1 
    # Other configuration for this app here 

</VirtualHost> 

<VirtualHost *> 
    ServerName wildcard.example.com 
    ServerAlias *.example.com 

    DocumentRoot = /var/www/wildcard 
    # other configuration for this app here 

</VirtualHost> 

문제는 충돌합니다. 어느 쪽이 먼저 나열 되든간에 승리합니다. 와일드 카드 가상 호스트와 특정 호스트를 모두 호스트하는 방법은 무엇입니까?

참고 : mod_rewrite을 사용하여 구성 변경시 DocumentRoot을 변경하는 것이 아니기 때문에 DocumentRoot 변수를 변경해도 수정되지 않습니다.

답변

134
<VirtualHost *:80> 
    DocumentRoot /var/www/app1 
    ServerName app1.example.com 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /var/www/example 
    ServerName example.com 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /var/www/wildcard 
    ServerName other.example.com 
    ServerAlias *.example.com 
</VirtualHost> 

작동해야합니다. 명시 적으로 일치하지 않으면 첫 번째 항목이 기본값이됩니다. 따라서 app.otherexample.com을 가리키면 app1.example.com이라고합니다.

+1

에서 또한 더 많은 정보가 그냥 질문이

<VirtualHost *:80> ServerAlias *.example.com VirtualDocumentRoot /var/www/%1/ </VirtualHost> 

충분하다? –

+0

이 지시어는 이름 기반의 가상 호스트를 가능하게하고 apache가 포트 80의 모든 ip (*)를 수신하도록 지시합니다. Apache 2.2 Docs : http://httpd.apache.org/docs/2.2/en/vhosts/name-based .html –

+3

NameVirtualHost * : 80을 제거하십시오 : AH00548 : NameVirtualHost는 효과가 없으며 다음 릴리스에서 제거 될 것입니다. – nerdoc