mod_vhost_alias VirtualDocumentRoot много доменов

mod_vhost_alias VirtualDocumentRoot много доменов

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

Мне нужно разместить много клиентских веб-сайтов на сервере Ubuntu. Все работает хорошо, но я хочу настроить динамические виртуальные хосты, чтобы автоматизировать процесс создания сайта WordPress на сервере. У меня есть mod_vhost_aliasработающий модуль, и я им доволен, однако, я столкнулся с проблемой с .comдоменами vs .co.ukили .com.auдоменами иVirtualDocumentRoot

Для домена, такого как , example.comя хочу, чтобы все запросы к www.exapmple.comи example.comуказывали на каталог с именем вроде /var/webroot/example.com, а для доменов, таких как example.co.uk, я хотел бы, чтобы все запросы к www.example.co.ukи example.co.ukуказывали на каталог с именем/var/webroot/example.co.uk

VDR, который у меня сейчас есть, выглядит так...

VirtualDocumentRoot /var/webroot/%-2.0.%-1.0

Который захватывает предпоследнюю и последнюю части. Это отлично работает для , example.comно для example.co.ukон ищет каталог в /var/webroot/co.uk- что не идеально!

Есть ли способ обойти это? Нужно ли мне использовать mod_rewriteи если да, то как?

решение1

Это тот случай, когда я бы просто разбил символические ссылки вместо использования очень специфичного (и потенциально хрупкого) RewriteRule:

Используйте VirtualDocumentRoot /var/webroot/%0, затем внутри /var/webroot/создайте символическую ссылку для www.example.comуказания на реальный каталог example.com. Это будет работать с доменами любой необходимой вам глубины, в дополнение к тому, что это немного более гибко, если у вас есть сайт, на котором wwwпо какой-то причине должен быть другой контент, или вы хотите указать aaa.example.comна тот же контент, что и example.com.

Если вам это не по душе, то вы действительно можете использовать mod_rewrite:

DocumentRoot /var/webroot
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^/(.*)$ /%2/$1

Это просто всегда будет искать доменное имя в /var/webroot, удаляя wwwперед поиском его название, если оно там есть.

В качестве альтернативы вы также можете выполнить перенаправление, чтобы удалить (или добавить) ко wwwвсем запросам вместо того, чтобы предоставлять один и тот же контент для обоих доменов.

Связанный контент