Подстановочная маршрутизация субдоменов в Apache
Я заметил, что некоторые хостинг-провайдеры имеют настройку Apache, поэтому, если я создаю каталог (foo.example.com), Apache автоматически узнает, что DNS-запись для foo.example.com направляет к этому корню документа.
Что мне нужно сделать, это настроить что-то вроде этого:
<VirtualHost *:80>
ServerName *.example.com
DocumentRoot /home/user/*.example.com
</VirtualHost>
Где DocumentRoot будет соответствовать на основе шаблона из подстановочного знака ServerName.
При этом все, что мне нужно сделать, это создать /home/user/foo.example.com
после того, как конфигурация на месте и не нужно ничего менять в Apache. Это позволило бы мне добавлять субдомены на лету без необходимости перезагружать, перезагружать или даже редактировать что-либо в Apache.
Вариант использования будет примерно таким.
mkdir /home/user/baz.example.com/
- ?????
- прибыль
Где мне не нужно ничего делать, а просто сделать каталог.
4 ответа
VirtualDocumentRoot
должен сделать свое дело.
<VirtualHost *:80>
ServerName catchall.invalid
ServerAlias *
VirtualDocumentRoot /home/user/%0
</VirtualHost>
Последняя компания, с которой я работал, делала нечто подобное, вместо того, чтобы жестко программировать ее в конфигурации apache, мы хотели сохранить конфигурацию в базе данных, что позволило бы нам обновлять ее в любое время, когда она нам понадобится.
http://blog.straylightrun.net/2009/07/31/storing-apache-virtual-hosts-in-a-database/
это блог, который мы использовали для этого.
http://code.google.com/p/dbd-modules/wiki/mod_vhost_dbd
Мод vhost dbd wiki, хорошая информация о хранении ваших конфигураций vhost в базе данных.
Я думаю, у меня недостаточно кармы, чтобы добавить комментарий, поэтому я добавлю ответ. Ответ Стива Мэддена правильный.
Если вы хотите создать домен разработки на своем локальном компьютере (например, mycomputer.dev), вы можете использовать VirtualDocumentRoot
трюк вместе с запуском локального DNS-сервера. Затем, когда вы хотите начать новый сайт, просто создайте каталог. Без редактирования Apache, без редактирования файлов хостов, без перезапуска Apache.
Это сообщение в блоге с практическими рекомендациями для * nix:
http://blog.sznapka.pl/dynamic-lamp-setup-for-localhost-development/
И инструкции для Windows:
http://blog.straylightrun.net/2010/05/10/throw-away-your-hosts-file-developing-locally-with-bind/
Если вы "только" хотите сделать то, что выразили в последнем разделе вашего вопроса, просто сделайте это так:
<VirtualHost *:80>
ServerName *.example.com
DocumentRoot /home/user/foo.example.com
</VirtualHost>
И вы настроены.