Apache2 VirtualHosts 和通配符子域名

Apache2 VirtualHosts 和通配符子域名

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

IE:

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>

答案1

这应该可以正常工作,这绝对是完成您要做的事情的正确方法!

  • 在您的示例中,加载顺序并不重要,因为这些虚拟主机涵盖了您为其提供内容的所有域。
    • ServerName与或完全匹配ServerAlias将会胜过通配符ServerAlias,无论它们的加载顺序如何。
    • 对于那些不以任何方式匹配任何ServerNameServerAlias指令的请求(例如,URL 中的 IP 而不是主机名)来说,加载顺序很重要 - 这些请求将由第一个加载的虚拟主机提供服务。

相关内容