У меня есть сервер 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>