Múltiplos domínios (incluindo www- “subdominio”) no apache?

4

depois de brincar um pouco, decidi perguntar aqui:

Eu tenho um vhost e quero usar 2 domínios neste servidor. Meu arquivo de configuração do Apache é parecido com isto:

NameVirtualHost *
<VirtualHost *>
    ServerName www.domain1.de   
    DocumentRoot /var/www/folder1/

</VirtualHost>

<VirtualHost *>
    ServerName www.domain2.de
    DocumentRoot /var/www/folder2/
</VirtualHost>

Na página de configuração dos domínios do meu vhost, ambos os domínios atribuídos ao servidor ip.

O problema agora é:

  • www.domain1.de funciona
  • domain1.de funciona
  • www.domain2.de funciona
  • domain2.de não não funciona

Alguém sabe por que o segundo domínio só funciona com o "www" adicionado?

    
por TheHippo 09.06.2009 / 16:43

4 respostas

13

domain1.de funciona porque www.domain1.de é o primeiro VirtualHost e é exibido como padrão. Você precisa adicionar ServerAlias domain2.de a www.domain2.de para que a versão mais curta funcione também (você deve adicionar ServerAlias para www.domain1.de também).

Se você não quiser que www.domain1.de seja exibido como padrão, adicione outro VirtualHost no início servindo um arquivo HTML simples.

    
por 09.06.2009 / 16:51
5

Se você quiser canonicalizar seus domínios (por exemplo, redirecionar todos os domínio.de para www.domain.de), você pode usar algo como mod_rewrite:

<VirtualHost *>
  ServerName www.domain.de
  ServerAlias domain.de

  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^www
  RewriteRule /(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

As três linhas de reescrita basicamente:

  1. Verifique se o URL começa com "www"
  2. Se não, redirecione para o link

Se você for para 'domain.de', verá que não começa com 'www' e redireciona para 'www.domain.de'.

Se você quiser aplicar isso a todos os sites que hospeda, faça o seguinte:

<VirtualHost *>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^www
  RewriteRule /(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

<VirtualHost *>
  ServerName www.domain1.de
  DocumentRoot /wherever/1
</VirtualHost>

<VirtualHost *>
  ServerName www.domain2.de
  DocumentRoot /wherever/2
</VirtualHost>

Então, quando alguém tentar ir para 'domain1.de', ele acessará o primeiro virtualhost, que irá redirecioná-lo automaticamente para 'www. [qualquer domínio que ele tenha digitado]'.

Desta forma, se você for para 'domain1.de', verá que não começa com 'www' e redireciona para 'www.domain1.de'. Para 'domain2.de', ele será redirecionado para 'www.domain2.de'. Toda vez que você adicionar um novo site, você receberá automaticamente esse recurso, o que pode ser muito útil se você estiver adicionando / mantendo muitos sites.

    
por 10.06.2009 / 03:10
1

www.domain.com e domain.com podem, teoricamente, ser sites totalmente diferentes. Você deve especificar os dois. Você poderia usar um ServerAlias em seus blocos VirtualHost existentes, ou, você poderia fazer isso para fazer um redirecionamento 301 para SEO.

NameVirtualHost *
<VirtualHost *>
    ServerName domain1.de  
    DocumentRoot /var/www/folder1/
</VirtualHost>

<VirtualHost *>
    ServerName www.domain1.de  
    Redirect permanent / http://domain1.de/ 
</VirtualHost>

<VirtualHost *>
    ServerName domain2.de  
    DocumentRoot /var/www/folder2/
</VirtualHost>

<VirtualHost *>
    ServerName www.domain2.de  
    Redirect permanent / http://domain2.de/ 
</VirtualHost>
    
por 09.06.2009 / 16:54
1

Use o ServerAlias para associar mais de um domínio a um host virtual

NameVirtualHost *
<VirtualHost *>
    ServerName www.domain1.de 
    ServerAlias domain1.de *.domain1.de  
    DocumentRoot /var/www/folder1/
</VirtualHost>

<VirtualHost *>
    ServerName www.domain2.de
    ServerAlias domain2.de *.domain2.de  
    DocumentRoot /var/www/folder2/
</VirtualHost>
    
por 10.06.2009 / 01:54