Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机

Posted

技术标签:

【中文标题】Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机【英文标题】:Apache: disable redirecting to default vhost on mismatching server name 【发布时间】:2014-02-01 14:34:03 【问题描述】:

我在同一台机器上运行了许多服务,其中一个使用 SSL,比如说“c3po.com”。 我的服务器的网址是https://c3po.comhttp://r2d2.comhttp://jarjar.com

问题是,如果我输入https://r2d2.com,apache 会将我重定向到https://c3po.com,甚至没有更改网址。换句话说,我将看到 c3po 服务,我的浏览器显示 http://r2d2.com

我知道,当 Apache 不能完全匹配一个虚拟主机时,它会使用第一个加载的与 ip:port 匹配的虚拟主机,所以没有:

<VirtualHost *:443>
    ServerName r2d2.com
    ...

它将拾取 :443 上找到的唯一 vhost,即:

<VirtualHost *:443>
    ServerName c3po.com
    ...

我真正想要的是当用户键入https://r2d2.comhttps://jarjar.com 时会显示一个错误页面,因为这些服务(通过http 启用了ssl)根本不存在!我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

检查一下

名称虚拟主机 *:443

在您的主配置中启用。然后使用您的错误页面创建一个在端口 443 上侦听的 VirtualHost,并使用 c3po.com 的配置创建另一个 VirtualHost。如果任何用户将名称解析为您的服务器的 IP(他们将用于所有站点),他们将转到默认站点,除非他们要去 c3po。

以下内容应该可行:

默认值:

<VirtualHost *:443>
  ServerName _default_https
  DocumentRoot /path/to/error/page
  <Directory /path/to/error/page>
    ...
  </Directory>
</VirtualHost>

c3po:

<VirtualHost *:443>
  ServerName c3po.com
  ServerAlias www.c3po.com
  DocumentRoot /path/to/c3po
  <Directory /path/to/c3po>
    ...
  </Directory>
</VirtualHost>

【讨论】:

以上是关于Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

Apache禁用本地主机重定向

在没有 ServerName 的默认虚拟主机上将 HTTP 重定向到 HTTPS

Apache2不断重定向到默认页面

在 Apache 上通过 HTTPS 将服务器别名重定向到服务器名称

apache2 忽略默认主机并始终重定向到域,即使使用 IP

如何仅在确切的 url 匹配时重定向?