Depois de ter olhado em várias direções com John Auld (obrigado pelo seu tempo e ajuda), tenho finalmente encontrei uma solução. Como eu disse em um comentário anterior , não é 100 % perfeito mas bom o suficiente para mim.
Para maior clareza, aqui está o que eu queria ter no httpd-vhosts.conf:
<VirtualHost *:8080>
ServerName dev
ServerAlias *.dev
VirtualDocumentRoot "/usr/local/var/www/.dev/%-2+"
RewriteRule ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1" [P]
</VirtualHost>
E aqui está o que eu criei:
<VirtualHost *:8080>
ServerName dev
ServerAlias *.dev
VirtualDocumentRoot "/usr/local/var/www/.dev/%-2/%-3"
RewriteCond %{SERVER_NAME} (?:([^.]+)\.)?([^.]+)\.dev
RewriteRule ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000/usr/local/var/www/.dev/%2/${:%1|www}/$1" [P]
</VirtualHost>
Eu uso RewriteCond para capturar partes de %{SERVER_NAME} e reutilizá-las em RewriteRule .
Existem dois grupos de captura: subdomínio ( %1 ) e domínio ( %2 ). O subdomínio é opcional, portanto, uso a sintaxe ${map:value|default} para definir um valor padrão para o subdomínio quando vazio.
VirtualDocumentRoot tem seu próprio valor padrão quando uma parte ( %N.M ) não está disponível. Como dito na documentação :
If N or M is greater than the number of parts available a single underscore is interpolated.
É por isso que eu tive que usar um pequeno "truque" para fazê-lo funcionar com um subdomínio opcional:
ln -sfv /path/to/the/project/www /path/to/the/project/_
Se você pensar em uma maneira de fazer isso apenas , deixe um comentário e eu editarei minha resposta com sua contribuição.