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ţă: