如何在带有自定义变量的 Apache 中使用 <If> <ElseIf> <Else>?

How to use <If> <ElseIf> <Else> in Apache with custom variables?

Define FOO "/bar/foo/bar_v1.0.0"

<If "${FOO} == '/bar/foo/bar_v1.0.0'">
    Define BAR2 "foofoo1"
</If>
<ElseIf "${FOO} == '/bar/foo/bar_v2.0.0'">
    Define BAR2 "foofoo2"
</ElseIf>
<Else>
    Define BAR2 "foofoo3"
</Else>

我做错了什么?我已阅读 Apache docs and this one too,但看不出问题所在。

• 我试过 '${FOO}'${FOO}'%{FOO}'%{FOO}

• 我已尝试从字符串中删除引号:<If "${FOO} == /bar/foo/bar_v1.0.0">

• 我尝试完全删除双引号:<If ${FOO} == '/bar/foo/bar_v1.0.0'>

• 我也尝试过 <If "${FOO} =~ /bar_v1\.0\.0/">

<If "${FOO} -strmatch '/bar/foo/bar.v1.0.0'">

• 我还尝试从使用 Define 指令设置的值中删除引号:

Define FOO /bar/foo/bar_v1.0.0

• 我试过删除 ElseIf 块,只使用 IfElse

而且我总是将 BAR2 定义为“foofoo3”,因为它只是我放入“else”的异常(默认)值,以防万一。所以前两个块无论如何都不起作用。

我不明白,我什至可以在 Apache 表达式中使用自定义变量吗?该代码位于 Apache 配置文件中。


我收到 Apache 错误并且无法启动。该错误是因为我使用 BAR2 作为加载模块路径的一部分。当然 Apache 说它不能加载模块,因为实际上我没有这样的路径 "/usr/foofoo3/some_module" 但我当然有 "/usr/foofoo1/some_module""/usr/foofoo2/some_module",但正如我所说的前 2 个块永远不起作用

昨天我也尝试用 Numbers 而不是 String 做同样的测试,得到了同样的结果。所以,我很困惑,很失望,实际上已经完成了。我只是想出了另一种方法,在我看来它并不那么漂亮,但我会利用我所拥有的。如果有人对这里的代码感兴趣,它正是我所需要的: (根本没有“foofoo3”,因为我说这是一个例外,它是为了测试,我在 DEFAULT 部分用 BAR2 值作为“foofoo3”测试了这段代码)

Define BAR__v1_0_0 "OK"

# CONDITIONAL
<IfDefine BAR__v1_0_0 >
    Define FOO "/bar/foo/bar_v1.0.0"
    Define BAR2 "foofoo1"
</IfDefine>
<IfDefine BAR__v2_0_0 >
    Define FOO "/bar/foo/bar_v2.0.0"
    Define BAR2 "foofoo2"
</IfDefine>

# DEFAULT
<IfDefine !FOO>
    Define FOO "/bar/foo/bar_v1.0.0"
    Define BAR2 "foofoo1"
</IfDefine>

不过,我对这件事很好奇,尤其是@airtower-luna said on github。所以我做了另一个 super-simple 测试:

<If "'word' == 'word'">
    Define BAR2 "foofoo1"
</If>
<ElseIf "'noword' == 'word'">
    Define BAR2 "foofoo2"
</ElseIf>
<Else>
    Define BAR2 "foofoo3"
</Else>

我也是这样做的<If "word == word">

结果如何?相同 !!!我认为这很荒谬!我知道 config 文件不是脚本,但是 Apache 的家伙让 IfDefine 在启动时工作,但不是任何编码器 If Else 的 simple-well-known。 . 我不知道该说什么,只是 - 好吧,那好吧 (我不是说 meaning/intention 不尊重某人)。所以,也许有一天我会尝试 @mike-kaminski solution, but not today. After all attempts I just really doubt it works at startup at all, as was [said here]