Подстановочная маршрутизация субдоменов в 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.

Вариант использования будет примерно таким.

  1. mkdir /home/user/baz.example.com/
  2. ?????
  3. прибыль

Где мне не нужно ничего делать, а просто сделать каталог.

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>

И вы настроены.

Другие вопросы по тегам