我一直在读,在可能的情况下,我不应该使用 mod_rewrite
.因此,我正在尝试使用 RedirectMatch 进行 http 到 https 重写。
问题:我如何使用 RedirectMatch
并在 URL 参数中使用 Apache 服务器变量(例如 %{HTTP_HOST}
)?
此代码无法向客户端 (Chrome) 返回响应:
RedirectMatch ^(.*) https://%{HTTP_HOST}/$1
我最近问了一个类似的问题,但可能太罗嗦了,没有答案的方向:Redirecting http traffic to https in Apache without using mod_rewrite
最佳答案
如果您使用的是 2.4.19 或更高版本, Redirect
directive有一个有点晦涩的功能:把它放在 Location
中或 LocationMatch
将启用 expression syntax .
所以你的例子可以写成
<LocationMatch ^(?<PATH>.*)>
Redirect "https://%{HTTP_HOST}%{env:MATCH_PATH}"
</LocationMatch>
(这里,
?<PATH>
表示法意味着匹配捕获将保存到名为 MATCH_PATH
的环境变量中。这就是我们稍后在 Redirect
中使用它的方式。)如果您总是使用整个请求路径进行重定向,那就更容易了,因为您可以用
REQUEST_URI
完全替换捕获组。多变的:<Location "/">
Redirect "https://%{HTTP_HOST}%{REQUEST_URI}"
</Location>
现在,这比仅在这种情况下使用 mod_rewrite 更容易维护/理解吗?也许不吧。但这是一个选择。
关于apache - 在目标中使用带有 HTTP_HOST 的 RedirectMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289269/