Apache2 VirtualHosts和通配符子域名

有没有办法为单个域设置一个catchall(对于子域)虚拟服务器,我有一个预先定义的子域。

即:

webmail.example.com – >指向“/ var / web / roundcube”

beta.example.com – >指向“/ var / web / beta /”

example.com和所有其他子域 – >指向“/ var / web / www”

<VirtualHost *:80> ServerName webmail.example.com ServerAdmin [email protected] DocumentRoot /var/web/roundcube <Directory /var/web/roundcube/> ... </Directory> ... </VirtualHost> <VirtualHost *:80> ServerName beta.example.com ServerAdmin [email protected] DocumentRoot /var/web/beta <Directory /var/web/beta/> ... </Directory> ... </VirtualHost> <VirtualHost *:80> ServerName example.com ServerAlias *.example.com ServerAdmin [email protected] DocumentRoot /var/web/www <Directory /var/web/www/> ... </Directory> ... </VirtualHost> 

这应该工作得很好,这绝对是做你正在做的事情的正确方法!

  • 在您的示例中,加载顺序无关紧要,因为这些虚拟主机覆盖了您所服务内容的所有域。
    • ServerNameServerAlias的精确匹配将胜过通配符ServerAlias ,而不pipe它们加载的顺序如何。
    • 加载顺序对于任何与ServerNameServerAlias指令都不匹配的请求(例如,用URL而不是主机名中的IP)来说很重要 – 这些请求将由第一个虚拟主机来加载。