Назад | Перейти на главную страницу

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

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

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

mod vhost dbd wiki, хорошая информация о хранении ваших конфигураций vhost в базе данных.

Думаю, у меня недостаточно кармы, чтобы добавить комментарий, поэтому добавлю ответ. Ответ Стива Мэддена правильный.

Если вы хотите создать домен разработки на своем локальном компьютере (например, mycomputer.dev), вы можете использовать VirtualDocumentRoot трюк вместе с запуском локального DNS-сервера для этого. Затем, когда вы захотите создать новый веб-сайт, просто создайте каталог. Ни редактирования Apache, ни редактирования файлов hosts, ни перезапуска 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>

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