Apache:重定向ServerName不匹配的请求

时间:2016-07-24 07:27:27

标签: apache mod-rewrite

我对Apache重写规则比较陌生。我认为我需要做的事情应该相对简单,但我可以使用一些帮助。

我在Apache配置中定义了许多基于名称的虚拟主机,供开发人员测试新的功能分支,并且我有一个通配符DNS CNAME设置来引导流量。

当请求与其中一个虚拟主机中的ServerName匹配时,一切正常。但是,如果请求中的主机名与任何显式定义的虚拟主机不匹配,它将自动使用第一个虚拟主机。

这很令人困惑,因为开发人员可能认为他们正在访问正确的虚拟主机,而事实上他们并非如此。

我想要做的是在第一个虚拟主机中定义重写规则,这样如果请求中的主机名与定义的“ServerName”不完全匹配,它将重定向它。

例如......

如果我有2个虚拟主机定义如此......

<VirtualHost *:443>

    ServerName default.mydomain.com
    ...

</VirtualHost>

<VirtualHost *:443>

    ServerName my-feature-1.mydomain.com
    ...

</VirtualHost>

并且开发人员正在尝试向网站请求他们的新功能,但拼写错误,即

https://feature-1.mydomain.com

第一个虚拟主机将默默地为请求提供服务,并且它们可能不是更明智的,并且想知道为什么他们的新功能代码似乎无法正常工作。

我希望它能做什么呢。我想将它们重定向到......

https://default.mydomain.com

因此很明显他们错误地输入了网址。

1 个答案:

答案 0 :(得分:1)

我已经在第一个虚拟主机中使用了以下重写规则...

RewriteCond %{HTTP_HOST}   "!^default\.mydomain\.com" [NC]
RewriteRule ^/(.*)         https://default.mydomain.com [L,NE,R=301]

这适用于未被后续动态虚拟主机明确匹配的任何请求的默认值,但也会重定向到首选默认URL。我不想在未定义的网址上实际提供任何内容。

唯一可以稍微改善它的是不必在规则中复制域名。