![Apache2 VirtualHosts 和通配符子域名](https://linux22.com/image/803424/Apache2%20VirtualHosts%20%E5%92%8C%E9%80%9A%E9%85%8D%E7%AC%A6%E5%AD%90%E5%9F%9F%E5%90%8D.png)
有没有办法为单个域设置一个 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
,无论它们的加载顺序如何。- 对于那些不以任何方式匹配任何
ServerName
或ServerAlias
指令的请求(例如,URL 中的 IP 而不是主机名)来说,加载顺序很重要 - 这些请求将由第一个加载的虚拟主机提供服务。