Apacheconfigurationredirect只使用redirect,而不是重写

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