Я искал способ автоматического перенаправления доменов в определенную папку и нашел здесь хороший ответ на serverfault: Автоматический поддомен Apache2 VirtualHost. (Принятый ответ)
Пока все работает хорошо, но теперь мне нужно добавить к этому исключение. Результат, который я хочу, таков:
http://localhost/ --> E:/websites/
http://specialDomain2/ --> E:/websites/
http://normal1.com/ --> E:/websites/normal1.com/
http://normalDomain.com/ --> E:/websites/normalDomain.com/
Я получаю явный результат для двух последних доменов, но локальный хост не работает.
Я скопировал сценарий из приведенного выше вопроса и попытался добавить что-то вроде
<VirtualHost *:80>
RewriteEngine On
RewriteMap lowercase int:tolower
# if already rewitten and we have the right path, stop right here
RewriteRule ^(E:/websites/[^/]+/.*)$ $1 [L]
RewriteRule ^localhost/(.*)$ E:/websites/$1 [L] # <-- Added this row
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
RewriteRule ^(www\.)?([^/]+)/(.*)$ E:/websites/$2/$3 [L,E=VHOST_ROOT:E:/websites/$2/]
</VirtualHost>
Я подумал, что в этом есть смысл, так как я бы перевел это на
if URL = localhost/*
Do nothing (because of the [L] flag), and use the default document root specified earlier
else
continue
Что в этом плохого? Спасибо за любую помощь!
Фактически Apache уже умеет это делать. Если вы активировали виртуальный хостинг на основе имени есть один хост по умолчанию, который отвечает за несовпадение имен хостов.
Имя хоста совпадает, если совпадают ServerName или ServerAlias. Если ни один из настроенных виртуальных хостов не соответствует запросу, будет использоваться хост по умолчанию. Обычно это первый виртуальный хост в вашей конфигурации.
NameVirtualHost *:80
# default virtual host
<VirtualHost *:80>
ServerName localhost
DocumentRoot /www/localhost
</VirtualHost>
<VirtualHost *:80>
ServerName normal1.com
ServerAlias www.normal1.com
DocumentRoot /www/normal1.com
</VirtualHost>
<VirtualHost *:80>
ServerName normalDomain.com
ServerAlias www.normalDomain.com
DocumentRoot /www/normalDomain.com
</VirtualHost>