В настоящее время у меня есть несколько виртуальных хостов, настроенных для отдельных поддоменов. Было бы намного проще, если бы я мог сказать 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 для многих советов по массовому виртуальному хостингу.