Apache 配置重定向仅使用重定向,而不是重写

Apache 配置重定向仅使用重定向,而不是重写

PS:这是最初发布的问题的第二部分这里

我想禁用HSTS 标头完全针对特定虚拟主机。我有(每推荐) 在每个虚拟主机的 443 容器中重定向。它工作正常,但 Apache不推荐用一个重写规则除非绝对必要。是否可以仅使用以下方法执行重定向重定向,不是重写?

<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 无效,因此需要禁用这些 vhosts 的 hsts。

PS2:不要问我为什么我需要使用,Header unset因为我已经在使用了Header always set。在实现之前,它会向客户端发送两个标头Header unset,据我了解不应该

答案1

之所以使用Redirect而不是 ,mod_rewrite是因为后者比前者占用更多资源 - 而这样做的原因是后者可以做更多的事情。mod_rewrite可以做和RedirectMatch不能做的事情之一是跟踪请求中使用的主机名。

因此,这里的问题是,您想在重定向后继续使用相同的域名,并且希望所有域名都作为同一虚拟主机内的别名。只要您想要这两件事,那么这mod_rewrite就是唯一的工具。

如果您可以将所有请求重定向到一个规范主机名,或者您可以将它们拆分成VirtualHost每个域名一个,那么可以RedirectMatch改为使用,如下所示:

RedirectMatch ^(.*)$ https://dev.domain.com$1

相关内容