我运行的是Apache 2.4.20,所以我没有选择使用嵌套的if语句(我相信是2.4.26)。
我试图将所有HTTP请求重定向到特定的安全URL。但是10.156.108.[2-3]是防火墙的keepalive,所以我想排除它们。
- 如果HTTPS关闭且远程IP不是10.156.108.[2-3],则重定向。*
这显然是有效的,但仅适用于特定的IP:
<If "%{HTTPS} == 'off' && %{REMOTE_HOST} != '10.156.108.2'">
Redirect "/" https://www.example.com/
</If>
失败
<If "%{HTTPS} == 'off' && (%{REMOTE_HOST} != '10.156.108.2' || %{REMOTE_HOST} != '10.156.108.3')">
Redirect "/" https://www.example.com/
</If>
失败
<If "%{HTTPS} == 'off' && %{REMOTE_HOST} != '10.156.108.[2-3]'">
Redirect "/" https://www.example.com/
</If>
任何想法,谢谢。
艾迪
1条答案
按热度按时间lymnna711#
为什么第二个例子失败了?因为括号?我认为你必须把spaces between parentheses,可能像这样:
你也可以尽量避免使用括号:
逻辑上应该和第一个相同。
实际上,我在研究如何使用正则表达式与Apache指令时偶然发现了你的问题,所以我将使用的解决方案,但适用于你的用例:
**!~**表示一个string does not match the regular expression比较运算符,下面的正则表达式似乎是有效的when tested on Regexr(在您的用例中,您可以省略我必须使用的最后一个正斜杠后面的g)。
希望这些棍子中的一根。如果没有其他的工作,这应该: