У меня есть домашний сервер, который я использую для разработки, и иногда я борюсь с тем, что я ввожу один URL, и он загружает неправильный сайт, например,
:
https://dev.demoapp.com => https://dev.demoapp.com (исправить)
http: //dev.demoapp .com => http://dev.mysite.com (неверно)
, поэтому я пошел посмотреть, что Apache загружает все как:
Конфигурация VirtualHost:
*: 443 - это NameVirtualHost
сервер по умолчанию dev.demoapp.com (/etc/apache2/sites-enabled/dev.demoapp.com.conf : 1)
порт 443 namevhost dev.demoapp.com (/etc/apache2/sites-enabled/dev.demoapp.com.conf:1)
порт 443 namevhost dev.test. com (/etc/apache2/sites-enabled/dev.test.com.conf:1)
*: 80 - это NameVirtualHost
сервер по умолчанию dev.mysite.com (/ etc / apache2 / sites-enabled / dev.mysite.com.conf: 1)
порт 80 namevhost dev.mysite.com (/ etc / apache2 / sites-enabled / dev). mysite.com.conf: 1)
порт 80 namevhost dev.local.com (/etc/apache2/sites-enabled/dev.local.com.conf:1)
Я заметил, что некоторые сайты появляются дважды, и я не знаю, как это происходит.
как мне сделать так, чтобы http://dev.mysite.com либо перенаправлял на https, либо просто сообщал пользователю свой неверный URL (предпочел бы, чтобы он перенаправлял честно)
Вы должны определить отдельный контейнер <VirtualHost *:80>
с помощью ServeName /dev.demoapp.com
или добавить строку ServerAlias /dev.demoapp.com
в соответствующий существующий контейнер VirtualHost.
Нельзя обслуживать одни и те же виртуальные хосты с разными портами из ОДНОГО контейнера <VirtualHost ..>
, если только вы не работаете с подстановочным знаком для порта.
Я обычно работаю с файлами включений для всех директив, которые используются совместно с VirtualHosts, и помещаю только отдельные директивы, например SSL *, в отдельные директивы <VirtualHost ..:443>
(я даже помещаю каждый VIrtualHost в отдельный файл включения.)
Начиная с Apache httpd-2.3.11, не существует эффективной директивы NameVirtualHost (каждый раз, когда комбинация IP-адреса и порта используется в нескольких виртуальных хостах, виртуальный хостинг на основе имени автоматически включается для этого адреса - http: //httpd.apache.org/docs/2.4/mod/core.html#namevirtualhost)
Кроме того, DEFAULT VirtualHost не существует, первая найденная директива <VirtualHost>
де-факто является значением по умолчанию Это означает, что все клиентские запросы, чей заголовок HTTP_HOST явно не определен как ServerName
или ServerAlias
в отдельном <VirtualHost>
, обслуживаются в первой конфигурации Virualhost.
Если вы хотите реализовать VirtualHost по умолчанию, вы можете поместить контейнер <VirtualHost *:80>
в центральный файл httpd.conf, ДО того, как вы добавите какие-либо дополнительные файлы (до IncludeOptional /etc/apache2/sites-enabled/*.conf
или что-то еще), или напишите vhost include-файл, который находится вверху вашего списка, например. 0_default-vhost.conf, с <VirtualHost *:*>
или <VirtualHost *>
, пожалуйста, попробуйте, какой из них работает.