我尝试使用以下指令块Givet在apache配置文件中设置一些环境变量,该指令块设置了标头“ X-Forwarded-Proto”。
<If "-n req('X-Forwarded-Proto')">
SetEnv NON_EMPTY_PROTO on
<If "req('X-Forwarded-Proto') =~ /https/">
SetEnv HTTPS on
</If>
<Else>
SetEnv HTTPS off
</Else>
</If>
Run Code Online (Sandbox Code Playgroud)
结果,环境变量NON_EMPTY_PROTO设置为预期值,但未设置HTTPS变量。但是,如果我避免只为测试而嵌套,则两个变量均按预期设置。
<If "-n req('X-Forwarded-Proto')">
SetEnv NON_EMPTY_PROTO on
</If>
<If "req('X-Forwarded-Proto') =~ /https/">
SetEnv HTTPS on
</If>
<Else>
SetEnv HTTPS off
</Else>
Run Code Online (Sandbox Code Playgroud)
为什么在第一个示例中未验证内部块?指令文档中未提及任何有关可能嵌套或不可能嵌套的内容。
顺便说一句,我知道我可以在下面使用类似的逻辑,但是如果情况变得更复杂,嵌套就更简单,更方便。
<If "-n req('X-Forwarded-Proto') && req('X-Forwarded-Proto') =~ /https/">
SetEnv HTTPS on
</If>
<ElseIf "-n req('X-Forwarded-Proto')">
SetEnv HTTPS off
</ElseIf>
Run Code Online (Sandbox Code Playgroud)
我明确要求嵌套版本在这里不起作用的原因。
apache ×1