На этот вопрос уже есть ответ здесь:
У меня есть сервер httpd24, который я хочу использовать для сервера нескольких доменов.
У меня есть 3 определения VirtualHost.
<VirtualHost *:443>
ServerName one.example.com
# SSL stuff
DocumentRoot "/opt/rh/httpd24/root/var/www/one
</VirtualHost>
<VirtualHost *:443>
ServerName two.example.com
# SSL stuff
DocumentRoot "/opt/rh/httpd24/root/var/www/two
</VirtualHost>
<VirtualHost _default_:443>
Redirect / https://two.example.com
</VirtualHost>
Идея в том, что если ввести точный url one.example.com или two.example.com, то они получат соответствующие страницы. Если вводится любой другой домен, я хочу перенаправить его на https://two.example.com url.
Однако я обнаружил, что если я ввожу https://three.example.com, то не получаю перенаправления, вместо этого выдается контент для one.example.com.
Обратите внимание, что https://two.example.com работает, как и ожидалось. Моя проблема в том, что я ожидаю, что неизвестные домены будут перенаправлены, но вместо этого они разрешаются как one.example.com.
RPM, который я установил изначально, был httpd24-httpd-2.4.27-8.el6.1.x86_64.
Есть идеи, что происходит?
Первая запись виртуального хоста обычно становится виртуальным хостом по умолчанию , который будет использоваться для обработки запросов, которые не соответствуют последующим записям виртуального хоста
(упрощенно; https://httpd.apache.org/docs/2.4/vhosts/details.html дает гораздо более подробное объяснение ...)
Строка _default_
в записи VirtualHost
- это просто псевдоним для *
, на практике обычно не делает конкретную запись VirtualHost значением VirtualHost по умолчанию, если это не первое определение. .
Измените порядок определений виртуальных хостов, и ваша проблема должна быть решена.
<VirtualHost _default_:443>
Redirect / https://two.example.com
# ServerName not needed
# Any vhost that includes the magic _default_ wildcard is given the same ServerName as the main server.
# SSL stuff
</VirtualHost>
<VirtualHost *:443>
ServerName one.example.com
# SSL stuff
DocumentRoot "/opt/rh/httpd24/root/var/www/one
</VirtualHost>
<VirtualHost *:443>
ServerName two.example.com
# SSL stuff
DocumentRoot "/opt/rh/httpd24/root/var/www/two
</VirtualHost>