Editar eu acho que o que eu preciso aqui éSetEnvIf
Estou tentando consolidar todos os meus VirtualHosts de porta 80 em um bloco por conveniência, mas estou lutando com a peça final do quebra-cabeça.
Todos os vhosts da porta 80 aceitam uma conexão www
e a . Todas as outras solicitações 301 para https://example.com/ - não www.non-www
/.well-known/acme-challenge/
Acho que preciso transformar %{HTTP_HOST}
em uma variável Defineable menos o possível "www" , por exemplo ${SITE}
.
Ou talvez haja uma maneira melhor?
É aqui que estou até agora:
<VirtualHost ${IP1}:80>
Define SITE hmmm
ServerName example-1.com
ServerAlias www.example-1.com
ServerAlias example-2.com
ServerAlias www.example-2.com
# And so on... 25 vhosts
DocumentRoot /home/user/htdocs/${SITE}
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]
<Directory /home/user/htdocs/${SITE}>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Mas, AFAIK, você não pode usar variáveis de ambiente nas diretivas
DocumentRoot
e .<Directory>
(E você não podeDefine
variáveis para uma string calculada/dinâmica usando um regex.)Em vez disso, você pode definir a
VirtualDocumentRoot
e usar um regex apropriado nas diretivas e no<DirectoryMatch>
contêiner mod_rewrite.Por exemplo, supondo que todos os seus domínios estejam no formato
<name>.<tld>
, tente o seguinte em vez do subconjunto de diretivas acima:A
%-2.0.%-1.0
parte daVirtualDocumentRoot
diretiva captura o nome de domínio e o TLD (as duas últimas partes) do nome de host solicitado. É importante ressaltar que isso exclui um subdomínio www opcional (3ª parte à direita).A referência
%1
inversa na string deRewriteRule
substituição faz referência à parte do nome do host menos owww.
prefixo opcional (subdomínio) capturado no CondPattern anterior . (Isso também exclui o ponto final no caso de um FQDN.)A
<DirectoryMatch>
diretiva permite o acesso a qualquer diretório que esteja no formato/home/user/htdocs/<example>.com
.Referência: