我一直读到,在可能的情况下,我不应该使用mod_rewrite。因此,我试图用RedirectMatch对https进行http重写。
问题:如何在参数中使用RedirectMatch和使用Apache变量(例如%{HTTP_HOST})?
此代码无法向客户端返回响应(Chrome):
RedirectMatch ^(.*) https://%{HTTP_HOST}/$1我最近问了一个类似的问题,但它可能过于冗长,缺乏答案的方向:重写。
发布于 2016-10-27 16:12:01
不,不能在重定向/重定向匹配中使用该类型的变量。如果需要变量(如%{HTTP_HOST} ),请使用mod_rewrite。
注意:我赞扬您没有立即尝试使用mod_rewrite,因为即使是最简单的重定向,大多数人也会选择mod_rewrite,这显然是过分的,而且大多数情况下它只是想让事情变得不必要地复杂。
发布于 2016-10-27 17:42:24
如果您使用的是2.4.19或更高版本,那么指令有一个有点模糊的特性:将其放入Location或LocationMatch中将启用表达式语法。
所以你的例子可以写成
<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更容易维护/理解?也许不是。但这是个选择。
发布于 2021-05-27 08:31:33
为将来可能面临同样情况的用户写作。
不确定如何添加vhost条目。
我想这个vhost条目是在一些编程脚本的帮助下自动添加的。VhostDirective和ServerName一起使用吗?
<VirtualHost *:8080>
ServerName example.domain.com
</VirutalHost>如果是这样,则可以使用相同的域值填充RedirectMatch字段。
如果要手动添加vhost条目,只需显式地写入域URL值,而不是HTTP_HOST。
或者让我知道这是不是另一种情况。
https://stackoverflow.com/questions/40289269
复制相似问题