Я настраиваю сервер (Ubuntu Server 18.04) под управлением Apache2 для своих личных нужд тестирования и разработки. Я могу получить к нему доступ только через локальный IP-адрес (например, http://10.0.0.125
) или через его имя в локальной сети (например, http://jeeves
), но пока это нормально.
Я хотел создать несколько субдоменов на этом сервере, чтобы должным образом изолировать несвязанные сайты, но я не верю, что могу использовать реальные субдомены: http://sub.10.0.0.125
не работает, так как IP не является доменом, следовательно, не может иметь поддомен, и http://sub.jeeves
не работает, так как браузер интерпретирует .jeeves
как TLD, а не как имя сервера.
Поэтому я пришел к другому решению:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html
AliasMatch "^/~(.*)" "/var/www/$1"
</VirtualHost>
Теперь я могу создать каталог /var/www/sub
и получить к нему доступ через http://jeeves/~sub/
.
Я подумал, что это очень хороший компромисс ... за исключением того, что он не является поддоменом и работает не так, как ссылка <a href="/foo/">
будет ссылаться на http://jeeves/foo/
и не так, как хотелось бы http://jeeves/~sub/foo/
. Я мог бы разобраться с этим в коде каждого сайта, но это было бы далеко от идеала.
Мой вопрос: есть ли способ заставить Apache обрабатывать /~sub/
часть URL как субдомен для всех намерений и целей (в частности, для ссылок)? Может быть, какая-то директива BaseDir? Я не мог найти его, но это не значит, что чего-то такого не существует.
Прежде чем вы это предложите: получение фактического домена для этого сервера немного выходит за рамки моих текущих потребностей; запуск выделенного DNS-сервера кажется слишком сложным; и изменение файла hosts в каждой системе не совсем масштабируемо (скажем, на iPhone это тоже не тривиально).
Я чувствую, что мое решение идеально подходит для моих нужд, если только оно может работать.