Я думаю, что мне нужно здесь SetEnvIf
Но, AFAIK, вы не можете использовать среда переменные в DocumentRoot
и <Directory>
директивы. (И вы не можете Определять
переменные в вычисляемую/динамическую строку с использованием регулярного выражения.)
DocumentRoot /home/user/htdocs/${SITE}
RewriteEngine включен
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]
<Каталог /home/user/htdocs/${SITE}>
Вместо этого вы можете определить ВиртуальныйДокументКорень
и используйте соответствующее регулярное выражение в директивах mod_rewrite и <DirectoryMatch>
контейнер.
Например, предположим, что все ваши домены имеют вид <name>.<tld>
затем попробуйте следующее вместо приведенного выше подмножества директив:
VirtualDocumentRoot "/home/user/htdocs/%-2.0.%-1.0"
RewriteEngine включен
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">
%-2.0.%-1.0
часть ВиртуальныйДокументКорень
директива захватывает доменное имя и TLD (последние 2 части) из запрошенного имени хоста. Важно отметить, что это исключает необязательный субдомен www (3-я часть справа).
%1
обратная ссылка в Правило перезаписи
замена строка ссылается на часть имени хоста за вычетом необязательных www.
префикс (субдомен), захваченный в предыдущем CondPattern. (Это также исключает завершающую точку в случае полного доменного имени.)
<DirectoryMatch>
директива разрешает доступ к любому каталогу, имеющему форму /home/user/htdocs/<пример>.com
.
Справка: