Eu estava tendo problemas semelhantes, com um padrão ligeiramente diferente, usando um sufixo '.dev' para meus hosts virtuais, com o domínio completo como o nome da pasta.
Eu consegui trabalhar com VirtualDocumentRoot /www/sites/%-2+/public_html
...
<VirtualHost *:80>
ServerName dev
ServerAlias *.dev
UseCanonicalName Off
VirtualDocumentRoot /www/sites/%-2+/public_html
</VirtualHost>
Por exemplo O acima resolve uma solicitação para test.com.dev para www / sites / test.com / public_html
Acho que você só precisa do último /www/%2+/public_html/%1
para resolver sub.test.com para www/test.com/public_html/dev
, mas verifique os documentos para encontrar um padrão exato: link
Também achei este artigo bastante útil: link
Você também pode usar DNSmasq para tornar as entradas do host automáticas também.