我对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
第一个虚拟主机将默默地为请求提供服务,并且它们可能不是更明智的,并且想知道为什么他们的新功能代码似乎无法正常工作。
我希望它能做什么呢。我想将它们重定向到......
因此很明显他们错误地输入了网址。
答案 0 :(得分:1)
我已经在第一个虚拟主机中使用了以下重写规则...
RewriteCond %{HTTP_HOST} "!^default\.mydomain\.com" [NC]
RewriteRule ^/(.*) https://default.mydomain.com [L,NE,R=301]
这适用于未被后续动态虚拟主机明确匹配的任何请求的默认值,但也会重定向到首选默认URL。我不想在未定义的网址上实际提供任何内容。
唯一可以稍微改善它的是不必在规则中复制域名。