mod_vhost_alias VirtualDocumentRoot muitos domínios

mod_vhost_alias VirtualDocumentRoot muitos domínios

Tenho certeza de que não sou a primeira pessoa a encontrar esse problema, mas não consigo, de jeito nenhum, encontrar uma resposta - embora isso possa ser devido a não saber o que procurar.

Preciso hospedar muitos sites de clientes em um servidor Ubuntu. Tudo está funcionando bem, mas quero configurar hosts virtuais dinâmicos, para poder automatizar o processo de criação de um site wordpress no servidor. Tenho mod_vhost_aliaso módulo funcionando e estou satisfeito com isso, no entanto, tive um problema com .comdomínios vs .co.ukou .com.audomínios e oVirtualDocumentRoot

Para um domínio como example.comeu quero www.exapmple.comque todas as solicitações example.comapontem para um diretório chamado algo como /var/webroot/example.come para domínios como example.co.ukeu gostaria que todas as solicitações www.example.co.ukapontassem example.co.ukpara um diretório chamado/var/webroot/example.co.uk

O VDR que tenho no momento é assim...

VirtualDocumentRoot /var/webroot/%-2.0.%-1.0

O que agarra a penúltima e última parte. Isso funciona muito bem, example.commas example.co.ukestá procurando um diretório em /var/webroot/co.uk- o que não é o ideal!

Existe uma maneira de contornar isso? Preciso usar mod_rewritee, em caso afirmativo, como?

Responder1

Este é um caso em que eu apenas quebraria os links simbólicos em vez de usar um muito específico (e potencialmente frágil) RewriteRule:

Use VirtualDocumentRoot /var/webroot/%0e, em seguida, /var/webroot/crie um link simbólico para www.example.comapontar para o diretório real de example.com. Isso funcionará com domínios da profundidade que você precisar, além de ser um pouco mais flexível se você tiver um site onde wwwdeveria ter conteúdo diferente por algum motivo, ou se quiser apontar aaa.example.compara o mesmo conteúdo de example.com.

Se isso não for do seu agrado, você poderia usar mod_rewrite:

DocumentRoot /var/webroot
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^/(.*)$ /%2/$1

Isso sempre procurará o nome de domínio em /var/webroot, rasgando wwwa frente, se estiver lá, antes de procurar.

Como alternativa, você também pode redirecionar para remover (ou adicionar) a wwwtodas as solicitações, em vez de servir o mesmo conteúdo para ambos os domínios.

informação relacionada