PS:这是最初发布在这里的问题的第二部分。
我想为特定的虚拟主机完全禁用HSTS标头 。 我有(每个build议 )在443容器中为这些虚拟主机中的每一个redirect。 它工作正常,但Apache 不build议使用RewriteRule,除非绝对必要。 是否有可能执行下面的redirect只使用redirect ,而不是重写?
<VirtualHost xxxx: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
不能跟踪请求中使用的主机名。
所以,这里的问题是你想在redirect之后继续使用相同的域名,并且你希望在同一个虚拟主机中把所有的域作为别名。 只要你想要这两个东西,那么mod_rewrite
是唯一的工具。
如果你可以将所有的请求redirect到一个规范的主机名,或者你可以把它们分成一个VirtualHost
主机,每个域名都可以使用RedirectMatch
,如下所示:
RedirectMatch ^(.*)$ https://dev.domain.com$1