Виртуальный хост Apache с использованием mod_vhost_alias

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

Для этого я установил следующее в моем файле 000-default.conf в папке с доступными сайтами.

UseCanonicalName Off
VirtualDocumentRoot / var / www / example /% 2

Это отлично сработало.

Затем я хотел настроить пару разных доменов, чтобы они указывали не на папку с примером, а где-то еще, поэтому я добавил пару из них перед строкой VirtualDocumentRoot:


ServerName sub1.example.com
VirtualDocumentRoot /var/www/sub1.example.com

Однако теперь динамическое указание больше не работает, и все URL-адреса перенаправляются в первое -> расположение VirtualDocumentRoot.

Может кто-нибудь указать мне, что я делаю не так?

Пример полного кода в apache2 / sites-available / 000-default.conf:


ServerName sub1.example.com
VirtualDocumentRoot /var/www/sub1.example.com


ServerName sub2.example.com
VirtualDocumentRoot /var/www/sub2.example.com


ServerName sub3.example.com
VirtualDocumentRoot /var/www/sub3.example.com

UseCanonicalName Off
VirtualDocumentRoot / var / www / example /% 2


person Go0se    schedule 14.04.2014    source источник


Ответы (2)


Не используйте VirtualDocumentRoot для простых виртуальных хостов, используйте только DocumentRoot.

VirtualDocumentRoot определяет всеохватывающий массовый виртуальный хост, и по определению у вас может быть только один массовый виртуальный хост (иначе как apache может знать, какому VH должно соответствовать данное имя хоста).

Изменить:

Теперь вам нужны другие изменения: - убедитесь, что у вас есть NameVirtualHost *:80 где-то в конфигурации apache (если вы не используете Apache 2.4). - Переместите Mass-Virtualhost как первый, чтобы он стал виртуальным хостом по умолчанию. Виртуальный хост по умолчанию используется, когда имя хоста запроса не соответствует какой-либо директиве ServerName. (Вы можете проверить VH по умолчанию, запустив apache с параметром -S).

person regilero    schedule 14.04.2014
comment
Я использовал VirtualDocumentRoot, потому что он используется таким образом на веб-сайте Apache в примере. Однако я попробовал ваше решение, и оно не меняет результатов. - person Go0se; 17.04.2014
comment
Хорошо, мне удалось решить проблему, и ваше предложение было фактически частью того, что было необходимо, чтобы заставить его работать. Спасибо. Я поддержал ваш ответ, но также опубликовал подробное описание того, что решило проблему. - person Go0se; 25.04.2014

Я понял, как это сделать, и решил опубликовать здесь решение для всех, кто сталкивается с подобной проблемой:

Итак, чтобы настроить apache2, используя mod_vhost_alias, чтобы все домены указывали на общую папку с тем же именем, но определенные домены указывали в другом месте, это то, что вам нужно сделать.

В файле конфигурации сайта 000-default.conf напишите следующий код:

UseCanonicalName Off

Затем добавьте следующий блок для каждого конкретного домена, который вы хотите указать на конкретную папку, заменив example.com своим доменным именем:

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.*
 DocumentRoot path/to/your/folder
</VirtualHost>

Затем добавьте следующий блок, чтобы указать все другие общие домены в общую папку:

<VirtualHost *:80>
 ServerName vhosts.fqdn
 ServerAlias www.*
 VirtualDocumentRoot path/to/your/folder/%2+
</VirtualHost>

<VirtualHost *:80>
 ServerName vhosts.fqdn
 ServerAlias *
 VirtualDocumentRoot path/to/your/folder/%1+
</VirtualHost>

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

Для получения дополнительной информации о параметрах динамического массового виртуального хоста для использования в корне документа перейдите по адресу: http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html

person Go0se    schedule 24.04.2014