Apache Multiple VirtualDocumentRoot - PullRequest
       40

Apache Multiple VirtualDocumentRoot

14 голосов
/ 15 февраля 2009

Используя Apache2 в системе Linux, есть способ иметь несколько VirtualDocumentRoot, используя mod_vhost_alias ?

Это соглашение об именах, которое я использую в настоящее время и которое я хотел бы продолжать использовать:

host                    directory
127.0.0.1 domain        domain.com
127.0.0.1 sub.domain    domain.com_sub

Тогда в моем разделе vhosts httpd.conf у меня есть:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
    VirtualDocumentRoot /var/www/%0.0.com
</VirtualHost>

<VirtualHost 127.0.0.1>
    VirtualDocumentRoot /var/www/%2.0.com_%1
</VirtualHost>

Проблема в том, что когда я захожу на sub.domain, журнал ошибок Apache показывает, что он ищет /var/www/sub.domain.com, а не /var/www/domain.com_test, что заставляет меня верить в это только читает первое правило, а затем терпит неудачу, но я хотел бы, чтобы он использовал любой корень документа, который удовлетворяет любому из двух правил VirtualDocumentRoot.

Ответы [ 5 ]

13 голосов
/ 15 февраля 2009

Apache обычно выбирает первый виртуальный хост, чей ServerName или ServerAlias соответствует имени хоста, указанному в заголовке HTTP Host. В вашем случае, поскольку у вас нет директив ServerName, Apache предположительно использует обратный поиск DNS по IP-адресу, чтобы подделать имя сервера, и предположить, что обратный DNS приводит к domain.com, что не соответствует, тогда Apache по умолчанию используется первый виртуальный хост. Звучит сложно, я знаю ... суть в том, что вы должны использовать ServerName и ServerAlias, чтобы сделать конфигурацию явной. Попробуйте что-то вроде этого:

NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
    ServerName domain.com
    ServerAlias www.domain.com
    VirtualDocumentRoot /var/www/%0
</VirtualHost>
<VirtualHost 127.0.0.1>
    ServerName sub.domain.com
    ServerAlias *.domain.com
    VirtualDocumentRoot /var/www/%2.%3_%1
</VirtualHost>

Это должно использовать /var/www/domain.com для http://domain.com и /var/www/www.domain.com для http://www.domain.com,, оба из которых обслуживаются первым vhost, и /var/www/sub.domain.com для http://sub.domain.com, /var/www/blah.domain.com для http://blah.domain.com, и т. д.

4 голосов
/ 30 июля 2010

Вы должны квалифицировать обратные ссылки, когда хотите поставить '.' в пути к файлу. Так что вам нужно иметь это так:

VirtualDocumentRoot /var/www/%2.0.%3_%1
2 голосов
/ 24 марта 2010

Относительно OP и проблемы с устанавливаемым "/ var / www / html":

Проблема, с которой я столкнулся, заключалась в использовании% 1 вместо% 2. Вот мой рабочий пример:

ServerAlias www.*.org.au
UseCanonicalName Off
VirtualDocumentRoot /path/to/sites/%2/pub

Надеюсь, это кому-нибудь поможет!

Я прочитал документы по "Интерполяции имени каталога" в mod_vhost_alias docs .

0 голосов
/ 01 июня 2015

Я наконец нашел конфигурацию, которая позволяет гибко создавать поддомен.

См. Документы Apache по mod_vhost_alias

Если ваш корневой dev-домен состоит из 3 частей, таких как dev.example.com, вы можете использовать %-4+ в качестве заполнителя для всего перед корневым доменом. Если он состоит из 4 частей, используйте %-5+.

<VirtualHost *:80>
    VirtualDocumentRoot "/var/www/%-4+/webroot"
    ServerName www.dev.example.com
    ServerAlias *.dev.example.com
    php_admin_value auto_prepend_file /var/www/setdocroot.php
</VirtualHost>

Таким образом, вы можете создать каталог с именем /var/www/sub.domain/webroot и получить к нему доступ с помощью URL sub.domain.dev.example.com.

Строка php_admin_value auto_prepend_file /var/www/setdocroot.php исправляет документацию в некоторых системах, таких как OSX 10.9 +

Вот содержание setdocroot.php:

<?php
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);
?>
0 голосов
/ 16 февраля 2010

Что я заметил в этой конфигурации, так это то, что $ _SERVER ['DOCUMENT_ROOT'] указывает на / var / www / html, а не на корень документа vhost. странно.

Обновление (2010-07-24):

Я только что написал сообщение в блоге, как настроить ваш http пробный сервер http://www.devcha.com/2010/07/how-to-setup-your-http-proof-server.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...