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.