apache - 在目标中使用带有 HTTP_HOST 的 RedirectMatch

标签 apache http-redirect mod-alias

我一直在读,在可能的情况下,我不应该使用 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/

相关文章:

Apache ErrorDocument 绝对路径

Apache 2.4 AliasMatch 在别名工作时不断返回 404

.htaccess - 排除别名域上的重定向规则 - 对于特定文件 (Robots.txt)

php - apache 2.4.7 虚拟主机上的多个 php/symfony2 应用程序

php - 谷歌云中的 Ubuntu 服务器不会在浏览器中运行应用程序

asp.net - 在 ASP.Net 中使用 <httpRedirect> 传递参数

local-storage - 浏览器在重定向时清除缓存

mysql - 安全远程 mySQL 连接

apache - mod_perl2 与 apache 2.22 Apache2::RequestIO::print: (103) 软件导致连接中止

python - 如何编写单元测试以确保我的代码遵循 HTTP 重定向?