我一直读到,在可能的情况下,我不应该使用mod_rewrite
。因此,我正在尝试使用 RedirectMatch 进行 http 到 https 重写。
问题:我该如何使用RedirectMatch
并使用 Apache 服务器变量(例如%{HTTP_HOST}
) 在 URL 参数中?
此代码无法向客户端(Chrome)返回响应:
RedirectMatch ^(.*) https://%{HTTP_HOST}/$1
我最近问了一个与此类似的问题,但它可能太罗嗦并且缺乏答案的方向:在 Apache 中不使用 mod_rewrite 将 http 流量重定向到 https https://stackoverflow.com/questions/40263713/redirecting-http-traffic-to-https-in-apache-without-using-mod-rewrite
如果您使用的是 2.4.19 或更高版本,Redirect指示 https://httpd.apache.org/docs/current/mod/mod_alias.html#redirect有一个有点晦涩的功能:把它放在一个Location
or LocationMatch
将开启表达式语法 https://httpd.apache.org/docs/current/expr.html.
所以你的例子可以写成
<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 更容易维护/理解吗?也许不会。但这是一个选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)