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_moduleusando qualquer técnica que sua distribuição preferir (a2enmod vhost_aliasem 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 rewriteem distros baseadas no Debian ). -
Adicione essas diretivas ao
VirtualHostde 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 .