A solução mais fácil seria usar mod_vhost_alias . Não faz exatamente o que você descreveu, mas é muito próximo.
- Ative o
vhost_alias_module
usando qualquer técnica que sua distribuição preferir (a2enmod vhost_alias
em distros baseadas no Debian). -
Adicione essas diretivas a
httpd.conf
:UseCanonicalName Off VirtualDocumentRoot /var/www/%1/public
-
Crie uma entrada DNS curinga para example.com para que qualquer subdomínio de example.com seja direcionado para seu servidor.
Agora, o acesso a "hello.example.com" carregará o site localizado em /var/www/hello/public
.
Como alternativa, como mencionado por Gabor, você pode usar o mod_rewrite . A solução que vou descrever pressupõe que você não tenha outro conteúdo em example.com.
- Ative o mod_rewrite usando qualquer mecanismo que sua distro preferir (
a2enmod rewrite
em distros baseadas no Debian ). -
Adicione essas diretivas ao
VirtualHost
de example.com:RewriteEngine On RewriteRule ^([^/]+)(.*) /var/www/$1/public/$2
Isso irá reescrever uma solicitação para "example.com/hello/steve" para /var/www/hello/public/steve
.