PS:这是最初发布在这里的问题的第二部分。
我想为特定的虚拟主机完全禁用HSTS 标头。对于这些虚拟主机中的每一个,我(根据建议)在 443 容器中都有一个重定向。它工作正常,但除非绝对必要,否则Apache不建议使用RewriteRule 。是否可以仅使用Redirect而不是 rewrite来执行下面的重定向?
<VirtualHost x.x.x.x:443>
<IfModule mod_headers.c>
Header unset Strict-Transport-Security
Header always set Strict-Transport-Security "max-age=0;includeSubDomains"
</IfModule>
SuexecUserGroup "#520" "#520"
ServerName dev.domain.com
ServerAlias www.dev.domain.com
ServerAlias subdomainjr2b.dev.domain.com
ServerAlias www.subdomainjr2b.dev.domain.com
ServerAlias subdomainblah.dev.domain.com
ServerAlias www.subdomainblah.dev.domain.com
RewriteEngine On
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [redirect=302]
PS1:Domain.com 有一个通配符证书,通配符只对 sub.domain.com 有效,对 sub.sub.domain.com 无效,因此需要为这些虚拟主机禁用 hsts。
PS2:不要问我为什么要Header unset
在我已经使用的时候使用Header always set
。它在实现之前向客户端发送了两个标头,据Header unset
我所知,它不应该。
使用
Redirect
代替的原因mod_rewrite
是后者比前者占用更多的资源——而这样做的原因是后者可以做更多的事情。mod_rewrite
可以做和不能做的事情之一RedirectMatch
是跟踪请求中使用的主机名。因此,这里的问题是您希望在重定向后继续使用相同的域名,并且您希望所有域都作为同一虚拟主机中的别名。只要你想要这两样东西,那么
mod_rewrite
就是唯一的工具。如果您可以将所有请求重定向到一个规范的主机名,或者您可以将它们拆分为
VirtualHost
每个域名一个,则可以RedirectMatch
改用,如下所示: