
Уверен, я не первый, кто сталкивается с этой проблемой, но я не могу найти ответ, хоть убей — хотя это может быть связано с тем, что я не знаю, что искать.
Мне нужно разместить много клиентских веб-сайтов на сервере 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
всем запросам вместо того, чтобы предоставлять один и тот же контент для обоих доменов.