Cred că ceea ce am nevoie aici este SetEnvIf
Dar, AFAIK, nu poți folosi mediu inconjurator variabile în DocumentRoot și <Directory> directive. (Și nu poți Defini variabile într-un șir calculat/dinamic folosind un regex.)
DocumentRoot /home/user/htdocs/${SITE}
RewriteEngine activat
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]
<Director /home/user/htdocs/${SITE}>
În schimb, ai putea defini un VirtualDocumentRoot și utilizați un regex adecvat în directivele mod_rewrite și <DirectoryMatch> recipient.
De exemplu, presupunând că toate domeniile dvs. sunt de formă <name>.<tld> apoi încercați următoarele în loc de subsetul de directive de mai sus:
VirtualDocumentRoot „/home/user/htdocs/%-2.0.%-1.0”
RewriteEngine activat
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,R=301,L]
<DirectoryMatch „/home/user/htdocs/[^.]+\.com”>
The %-2.0.%-1.0 parte a VirtualDocumentRoot directiva captează numele de domeniu și TLD (ultimele 2 părți) din numele gazdă solicitat. Important este că acest lucru exclude un subdomeniu www opțional (a treia parte din dreapta).
The %1 backreference în RewriteRule substituţie șirul face referire la partea din numele gazdei mai puțin opționalul www. prefix (subdomeniu) capturat în precedentul CondPattern. (Acest lucru exclude, de asemenea, punctul final în cazul unui FQDN.)
The <DirectoryMatch> directiva permite accesul la orice director care este de forma /home/user/htdocs/<example>.com.
Referinţă: