Apache2 vários nomes de host redirecionados para um

3

Estou tentando redirecionar vários nomes de host para apenas um, por exemplo, se você inserir um destes:

foo.example.com
www.example.com
bar.example.com
eample.com

você deve ser redirecionado para www.example.com

Eu instalei um host virtual com www.example.com como ServerName e os outros como ServerAlias, e uso mod_rewrite para verificar se o hostname estava certo, e se não fizer um redirecionamento.

O problema é que tudo parece ser servido com o nome do host da diretiva ServerName, então mod_rewrite sempre obtém www.example.com , o que é consistente com a documentação do apache2:

For example, suppose that you are serving the domain www.domain.tld and you wish to add the virtual host www.otherdomain.tld, which points at the same IP address. Then you simply add the following to httpd.conf:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain

You can alternatively specify an explicit IP address in place of the * in both the NameVirtualHost and directives. For example, you might want to do this in order to run some name-based virtual hosts on one IP address, and either IP-based, or another set of name-based virtual hosts on another address.

Many servers want to be accessible by more than one name. This is possible with the ServerAlias directive, placed inside the section. For example in the first block above, the ServerAlias directive indicates that the listed names are other names which people can use to see that same web site:

ServerAlias domain.tld *.domain.tld then requests for all hosts in the domain.tld domain will be served by the www.domain.tld virtual host.

Existe alguma diretiva apache2 para evitar esse recurso e obter o servidor de solicitações com o nome do host do ServerAlias que eles correspondem?

Ou devo criar outro host virtual apenas para redirecionamento?

Obrigado

    
por alcuadrado 05.08.2010 / 23:47

2 respostas

3

Para ser honesto com você, o melhor que eu posso ver para isso seria se você configurasse seu domínio principal normalmente assim:

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

Em seguida, você cria um novo host virtual que conterá todos os domínios que deseja redirecionar da seguinte forma:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias foo.example.com bar.example.com others.example.com
    DocumentRoot /www/redirect_folder 
</virtualhost>

Dentro dessa pasta, crie uma página index.php simples que convoque o 301, de modo que qualquer domínio contido nele será redirecionado para o seu domínio principal com o código 301.

<?
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.example.com" );
?> 

Por que você acha que é melhor assim?

Dessa forma, você não precisará atualizar um monte de lugares sempre que tiver um novo domínio para manter e redirecionar para seu domínio principal e ele não estará servindo a seus usuários com o nome atual, mas os redirecionará para seu domínio principal em questão.

Se você é o dono do servidor, você pode torná-lo ainda melhor, você pode colocar o segundo virtualhost como o primeiro virtualhost em seu arquivo httpd.conf do vhost.conf e sempre que você acertar o IP do seu servidor, ele o guiará. a página de redirecionamento que levará seus usuários ao domínio principal neste caso, em vez de ter que configurar um grupo de ServerAlias, você pode simplesmente criar o registro de DNS A para aquele subdomínio ou domínio dado que leva ao seu IP e o servidor cuidará do descanso.

Neste último caso, tudo o que você precisaria para o seu host virtual seria:

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

como você não precisa do ServerAlias desde que cada e cada solicitação que atinge o IP do seu servidor irá para o seu primeiro vhost.

Além disso, se você quisesse fazer isso usando o .htaccess, seria algo como isto que eu acredito:

RewriteEngine on
rewritecond %{http_host} ^foo.example.com [nc]
rewriterule ^(.*)$ http://www.example.com/$1 [r=301,nc] 
    
por 06.08.2010 / 03:57
1

Tudo depende da ordem de configuração, neste caso.

Se você tem uma configuração como esta:

<VirtualHost>ServerAlias *.domain.tld</VirtualHost>
<VirtualHost>ServerName subdomain.domain.tld</VirtualHost>

Do que as pessoas sempre acabam no primeiro vhost. No entanto, se você defini-los assim, funciona:

<VirtualHost>ServerName subdomain.domain.tld</VirtualHost>
<VirtualHost>ServerAlias *.domain.tld</VirtualHost>

Lembre-se de que os curingas sempre devem estar na parte inferior.

    
por 06.08.2010 / 03:18