У меня есть сайт server.com, который я хочу вернуть, когда к нему обращаются напрямую с помощью server.com или www.server.com, но выдает 404, если к веб-серверу обращаются с использованием его IP-адреса или другого имени хоста.
Получилось примерно следующее:
NameVirtualhost 10.0.0.1:80
<VirtualHost 10.0.0.1:80> #This should be used if Host is server.com or www.server.com
ServerName server.com
ServerAlias server.com www.server.com
DocumentRoot /var/www/
</VirtualHost>
<VirtualHost 10.0.0.1:80> #This should be used alternatively
RewriteEngine On
RewriteRule (.*) - [R=404]
</VirtualHost>
Как мне теперь установить, что вторая запись должна использоваться, если имя хоста не server.com или www.server.com?
Чтобы ответить на ваш вопрос, вы можете сначала загрузить альтернативный виртуальный хост (второй в вашем файле), и он должен работать. (измените порядок в файле conf). Если конкретное имя хоста (server.com или www.server.com) не найдено, Apache будет использовать первый загруженный виртуальный хост, который соответствует.
Но если вы используете только нужный виртуальный хост (первый в вашем файле - server.com / www.server.com) и ничего больше, разве Apache не сделает то, что вы хотите? Он выдаст 404, если имя хоста отличается от имени в ServerName и ServerAlias (IP или другие имена хостов будут перенаправлены на 404).
(Замечания: вам не нужно повторять server.com в ServerAlias, поскольку он уже находится в ServerName)