![Apache 子域名和现有的通配符子域名](https://linux22.com/image/643991/Apache%20%E5%AD%90%E5%9F%9F%E5%90%8D%E5%92%8C%E7%8E%B0%E6%9C%89%E7%9A%84%E9%80%9A%E9%85%8D%E7%AC%A6%E5%AD%90%E5%9F%9F%E5%90%8D.png)
因此我有一个现有的通配符 DNS A 记录和子域虚拟服务器设置如下
DocumentRoot /path/to/code
<Directory "/path/to/code">
allow from all
Options +Indexes
</Directory>
ServerName existing.domain.co.uk
ServerAlias *.domain.co.uk
...我现在想添加另一个虚拟服务器,它以相同的方式工作,但带有子子域,以便我可以从类似的东西访问代码库的分支monkeys.alt.domain.co.uk
DocumentRoot /path/to/altcode
<Directory "/path/to/altcode">
allow from all
Options +Indexes
</Directory>
ServerName alt.domain.co.uk
ServerAlias *.alt.domain.co.uk
在 DNS 区域文件中,我已将另一个来自 *.alt 的 A 记录添加到 IP(恰好与 * A 记录是同一个 IP)。
现在我认为发生的情况是,现有的通配符正在拾取monkeys.alt.domain.co.uk
并将其发送到现有的虚拟服务器而不是新的虚拟服务器。
我的问题:我如何让流量monkeys.alt.domain.co.uk
转至新的“alt”虚拟服务器?
答案1
Apache 处理虚拟主机的顺序与读取配置的顺序相同。因此,如果它先读取,ServerAlias *.domain.co.uk
则任何 sub 或 sub.sub.domain 都将匹配。如果 Apache 可以先读取,ServerAlias *.alt.domain.co.uk
则 alt.domain.co.uk 的任何子域都将匹配,但不会匹配existing.domain.co.uk
,后者将匹配下一个 vHost。
因此,如果您在同一个文件中描述了两个虚拟主机,请将第二个虚拟主机 (monkey.alt vHost) 放在主 vHost 之前。如果它们位于不同的文件中,请重命名该文件,以便首先读取 monkey vHost 配置文件(例如,在开头添加 0)。