小编Art*_*osz的帖子

Apache 2.4,嵌套的If指令

我尝试使用以下指令块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

3
推荐指数
1
解决办法
3124
查看次数

标签 统计

apache ×1