Виртуальный хост для переопределения поддоменов виртуального хоста по умолчанию
У меня есть два vhosts, настроенных в Apache. Один по умолчанию для обработки всех запросов и один для определенного субдомена. Каталог www настроен следующим образом:
/var/www
/var/www/subdomain
Конфиги виртуального хоста:
<VirtualHost *:80>
DocumentRoot /var/www
<Directory />
Options None
AllowOverride None
</Directory>
<Directory /var/www>
Options None
AllowOverride None
Deny from all
</Directory>
</VirtualHost>
<VirtualHost subdomain>
ServerName subdomain.domain.com
DocumentRoot /var/www/subdomain
<Directory /var/www/subdomain>
Options None FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Прямо сейчас я хочу что-нибудь subdomain.domain.com
быть поданным из /var/www/subdomain
и любой другой запрос будет отклонен. Однако, когда я захожу на domain.com, он служит /var/www/subdomain
,
Спасибо, если кто-нибудь скажет мне, что я делаю не так. Спасибо!
РЕДАКТИРОВАТЬ с дополнительной информацией при запуске apache2ctl -S
/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using XX.XXX.XXX.XX for ServerName
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server domain (/etc/apache2/sites-enabled/default:1)
port 80 namevhost domain (/etc/apache2/sites-enabled/default:1)
port 80 namevhost sub.domain.com (/etc/apache2/sites-enabled/subdomain:1)
Syntax OK
1 ответ
Ваша проблема здесь:
<VirtualHost subdomain>
Не делайте этого, так как он дает приоритет vhost по сравнению с существующим для любого разрешенного IP-адреса. Так должно быть <VirtualHost *:80>
соответствующий вашему существующему vhost. ServerName
директива - это то место, куда должно идти имя vhost.
Вам также нужно NameVirtualHost *:80
где-нибудь, если у вас его еще нет.