Рейтинг:1

Консолидация множества виртуальных хостов в один блок — это работа для SetEnvIf?

флаг dj

Редактировать Я думаю, что мне нужно здесь SetEnvIf

Я пытаюсь объединить все мои виртуальные хосты с портом 80 в один блок для удобства, но я борюсь с последней частью головоломки.

Все виртуальные хосты порта 80 принимают www и без www связь с /.известный/acme-challenge/. Все остальные запросы 301 на https://example.com/ - нет www.

я думаю, мне нужно повернуть %{HTTP_HOST} в Определятьспособная переменная минус возможный "www", например ${САЙТ}.

Или, может быть, есть лучший способ?

Вот где я нахожусь до сих пор:

<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>
Рейтинг:1
флаг kz

Я думаю, что мне нужно здесь 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.

Справка:

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.