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

Автоматические поддомены с подстановочными знаками на Apache

В настоящее время у меня есть несколько виртуальных хостов, настроенных для отдельных поддоменов. Было бы намного проще, если бы я мог сказать Apache автоматически находить папку с помощью подстановочного знака. Например, hello.domain.com использовал бы /var/www/hello каталог как его DocumentRoot.

Однако я хотел бы иметь возможность определять исключения, например, если бы я хотел helloworld.domain.com указать на /var/www/helloworld/public вместо.

Я огляделся, но все примеры, кажется, делают что-то другое.

Вы сможете настроить это поведение с помощью следующих строк:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName catchall.domain.com
  ServerAlias *.domain.com
  VirtualDocumentRoot /var/www/%1
</VirtualHost>
<VirtualHost *:80>
  ServerName helloworld.domain.com
  DocumentRoot /var/www/helloworld/public
</VirtualHost>

Вышеуказанное использование mod_vhost_alias, Я использую mod_rewrite, что-то вроде этого в первом определенном (по умолчанию) VirtualHost:

RewriteEngine on
RewriteMap lc int:tolower

RewriteCond /var/www/${lc:%{SERVER_NAME}} -f 
RewriteRule ^/(.*)   /var/www/${lc:%{SERVER_NAME}}/htdocs/$1  

Это позволяет вам добавить немного больше логики, если это будет полезно. Я думал, что еще одним преимуществом подхода mod_rewrite является то, что он будет обрабатывать любой домен, не обязательно поддомены, но при тестировании (httpd-2.2.x) кажется, что ServerAlias примет любые разумные * и? подстановочные знаки, включая * .com или даже *. Итак, нет победы, если вам не нужны сложности.

В любом случае может быть полезно использовать директивы LogFormat / CustomLog для размещения запрошенного имени виртуального хоста (%v) в журналы:

LogFormat   "%v %h %l %u %t \"%r\" %>s %b"   log-with-vhost

Смотрите также http://httpd.apache.org/docs/2.2/vhosts/mass.html для многих советов по массовому виртуальному хостингу.