Есть ли способ в apache2 добавить виртуальный хост для несуществующих поддоменов?
Теперь я пробую это:
<VirtualHost *:80>
ServerAdmin info@devhouse.nl
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin info@devhouse.nl
ServerName *.devhouse.nl
DocumentRoot /var/www/errors
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/errors/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
Include sites-available/devhouse.nl.vhost
(второй виртуальный хост)
Но это не работает. Я вижу файл в / var / www, а не в / var / www / errors
Как я могу это исправить?
Если NameVirtualHost *:80
или чего-то подобного еще нет в ваших файлах конфигурации, это должно быть. Это необходимо, когда ваши VirtualHosts используют тот же IP-адрес и порт (как и ваш). Это сообщает Apache, что он должен использовать заголовок Host: в HTTP-запросе, чтобы выбрать, какой VirtualHost должен обрабатывать этот запрос.
У вас также должна быть директива ServerName в каждом VirtualHost, если вы используете NameVirtualHost. Это то, чему Apache сопоставляет заголовок Host :. Директива ServerName не может содержать символ *. Имя сервера должно точно соответствовать вашему домену. Если вы хотите сопоставить www.devhouse.nl и devhouse.nl, вам понадобится директива ServerAlias. Вы можете иметь столько директив ServerAlias, сколько хотите, но только одно ServerName.
ServerName devhouse.nl
ServerAlias www.devhouse.nl
ServerAlias mail.devhouse.nl
VirtualHost с указанным выше будет соответствовать HTTP-запросу, который был отправлен в один из этих трех доменов. Любой другой запрос будет отправлен на VirtualHost по умолчанию.
Первый VirtualHost, указанный в файлах конфигурации, станет VirtualHost по умолчанию. Это тот, который будет обрабатывать запрос, если он не соответствует никакому другому VirtualHost. Если вы хотите, чтобы тот, который вы указали вторым, был по умолчанию, вам придется поменять их местами в файле.
Документация Apache по этому поводу довольно хороша: http://httpd.apache.org/docs/2.2/vhosts/examples.html
Вы можете указать Apache список ваших VirtualHosts и порядок их выполнения с помощью команды apachectl -S
(Это заглавная буква S)
В Include
в конце выглядит довольно странно. Является ли первая часть списка содержимым включенного файла?
Если все это слишком много, чтобы принять его сразу, вам нужно сделать следующее:
NameVirtualHost *:80
перед ними обоими.*.
из директивы ServerName или замените его на www.
Неважно, что именно входит в VirtualHost по умолчанию, если это домен, которому вы хотите сопоставить.Вы можете создать VirtualHost по умолчанию, который будет запускаться всякий раз, когда не настроен соответствующий NamedVirtualHost. По сути, это будет похоже на первый приведенный вами пример. Затем вы добавляете NamedVirtualHosts для всех доменов, которые хотите обрабатывать (например, добавьте ServerName www.example.com
и т.д).
Каждый раз, когда запрашивается виртуальный хост, который не настроен, по умолчанию будет обслуживать этот запрос. При этом вы можете захотеть отобразить определенный контент и / или запустить перенаправление на существующий (или другой) сервер.
Вам может потребоваться объявить NameVirtualHost *:80
до блоков VirtualHost.