apache2:为什么所有子域名都重定向到 www?

apache2:为什么所有子域名都重定向到 www?

我的 conf 文件中有NameVirtualHost *:80inports.confVirtualHostwho has ServerName www.mysite.com。我还有几个子域映射到其他 VirtualHosts。

目前,如果我mysite.com使用某个未在我的配置文件中配置为子域的任意子域进行访问,它会重定向到带有 的子域www.。例如,如果我尝试,nowhere.mysite.com它会转到www.mysite.com

我不认为这是网站上的正常行为。我如何才能忽略所有未发送到任何正确域的请求?

答案1

首先,这些名称完全解析,而不是向用户发出名称解析错误,这意味着您在 DNS 区域中配置了通配符 ( *.mysite.com.)。如果您希望查找虚假子域失败,请将其删除。

在基于名称的虚拟主机上,在地址:端口组合上加载的第一个虚拟主机被视为默认虚拟主机,并处理所有未配置的主机名请求。您可以使用 了解这对您的安装有何影响apachectl -S

Apache 永远不会发送重定向30x响应,将用户置于不同的域名上,除非它已配置为这样做 - 您看到的重定向行为要么是明确配置的,要么是由您的 Web 服务器上运行的应用程序生成的。通常,您只会获得由默认虚拟主机提供的内容,而不会重定向到其规范名称。

如果您不想摆脱通配符 DNS,但确实希望为这些请求提供错误,则请将虚拟主机的加载顺序更改为默认顺序,如下所示:

<VirtualHost *:80>
  ServerName catchall
  <Location />
    Order allow,deny
    Deny from all
  </Location>
</VirtualHost>

答案2

如果域名 www.mysite.com 是配置中定义的第一个域名,那么这完全正常。如果 Apache 无法将 Host: 标头中的域名与虚拟主机匹配服务器名称或者服务器别名它将提供默认域的内容,除非另有定义,否则该域是第一个。

你应该读一下文档这非常有帮助。

相关内容