如何在带有自定义变量的 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
块,只使用 If
和 Else
而且我总是将 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]
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
块,只使用 If
和 Else
而且我总是将 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]