Redirecionar todos os subdomínios não www para o domínio www principal com Apache2

6

Eu tenho um site (domain.com) e gostaria de redirecionar todos os meus domínios secundários (domain2.com, domain3.com) e todos os subdomínios desses domínios (* .domain.com, * .domain2.com ...) para o domínio principal, www.domain.com (porque eu quero que o último seja o único URL a ter acesso ao site).

Para este propósito, eu criei um Host Virtual Apache para pegar todas essas possibilidades e redirecioná-las (depois de ter configurado meu DNS, isso é óbvio). Eu coloquei essa configuração em um arquivo chamado "999-catchall" na pasta "sites-enabled" do Apache. NB: Eu uso este nome para ter certeza de que será o último vhost verificado, porque eu também tenho o meu padrão vhost (000-default para www.domain.com) e um vhost para meu webmail (001-webmail para webmail.domain.com).

Aqui está o conteúdo deste arquivo "999-catchall":

<VirtualHost *:80>
        # catch...
        ServerName domain.com
        ServerAlias domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com
        # ...and redirect
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
        RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>

Essa configuração funciona para domain.com, domain2.com, * .domain2.com, domain3.com e * .domain3.com , mas não para * .domain.com . Exemplo: Se eu digitar blabla.domain2.com, eu serei redirecionado para www.domain.com, mas se eu digitar blaba.domain.com, não sou (apenas tenho um erro "Servidor não encontrado"). / p>

O meu método está correto? Você vê onde está o meu erro?

EDIT: Meu erro, meu servidor DNS não foi configurado corretamente para * .domain.com. Então, essa configuração funciona, se puder ajudar alguém que queira fazer a mesma coisa.

    
por 3 revs, 2 users 92%Flackou 05.03.2010 / 00:05

4 respostas

1

Não sou especialista em Apache, mas considerei mudar:

ServerName www.domain.com
ServerAlias domain.com domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com

edit: Ao reler o OP, parece que você já está configurando o www.domain.com em um arquivo diferente, o que eu não acredito que seja permitido. Isso, no entanto, pode ser parte do problema. Se eu estou seguindo você corretamente, a resposta de www.domain.com é daquele arquivo, não da configuração postada aqui.

    
por 17.09.2009 / 18:16
0

Eu escreveria RewriteRule como

RewriteRule ^(/.*)$ http://www.domain.com$1 [R=301,L]

para garantir que não estou anexando lixo aleatório ao domínio .com

e, em seguida, ative RewriteLogLevel 3 e RewriteLog e examinei o arquivo gerado em busca de outros erros.

Se você pudesse anexar a saída do wget em um dos domínios que não funciona, ajudaria.

    
por 17.09.2009 / 19:09
0

Eu não sei se você tem algum host virtual na máquina, mas tente verificar se blaba.domain.com não está definido em algum outro lugar na sua configuração

    
por 17.09.2009 / 19:47
0

NB : I use this name to be sure that it will be the last vhost checked, because I have also my default vhost (000-default for www.domain.com) and a vhost for my webmail (001-webmail for webmail.domain.com).

Os arquivos de configuração do Vhost são verificados alfabeticamente a partir de 0, e o primeiro deles funcionará como catchall.

Do Apache (1.3 a 2.2) Documentação:

The first vhost on this list (the first vhost in the config file with the specified IP address) has the highest priority and catches any request to an unknown server name or a request without a Host: header field.

Sua outra opção pode ser usar um _default_:80 virtualhost. Consulte Usando _default_ vhosts

    
por 22.10.2009 / 18:27