如何在 Apache SetEnvIf 值中转义空格

如何在 Apache SetEnvIf 值中转义空格

我正在尝试使用 SetEnvIf(Apache2,通过 .htaccess 文件)来存储环境变量,其中要分配给变量的值需要包含空格。例如,尝试将环境变量“AUTH_KEY”设置为值“a b”:

SetEnvIf Request_URI "^/example" AUTH_KEY="a\ b"

无论我做什么,我都无法避开值中的空格 - 空格充当要创建的环境变量之间的分隔符(在上面的 AUTH_KEY 中,创建值为 '"a\',创建第二个环境变量,名为 'b"')。我也尝试过单引号,但没有成功。

我该如何转义空格字符?

答案1

最后我自己终于弄明白了……

SetEnvIf Request_URI "^/example" "AUTH_KEY=a b"

这看起来很奇怪,但确实有效。它正确地将 AUTH_KEY 设置为值a b

希望这可以在将来节省其他人的时间。

细节:-我不是 C 程序员,但在 Google 上闲逛时,我发现 mod_setenvif.c 列在http://www.bvbcode.com/code/s6148jvr-385031

在第 405 行调用了一个函数(ap_getword_conf,我找到了详细信息http://docstore.mik.ua/orelly/apache_mod/155.htm) 似乎解析由空格分隔的字符串(但可以选择用引号括起来并接受使用转义字符)。

我注意到,这发生在上述函数返回的子字符串被“=”字符分割之前(第 411 行,由函数 ap_getword 执行)。因此,引号围绕着对key=value,而不仅仅是值。

答案2

尝试使用SetEnvIf Request_URI "^/example" AUTH_KEY="a\sb"。这里的 \s 代表空格。

相关内容