Apache 2.4.3 SSI如果expr没有变量?

Dan*_*iel 6 apache ssi

我有很多差异很小的文件.包含的文件包含此文件,它尝试区分较长路径的一部分:

<!--#if expr="${DOCUMENT_URI}=/internet/"-->Internet<!--#else-->Intranet<!--#endif-->
Run Code Online (Sandbox Code Playgroud)

在错误日志中,我得到了

AH01337:无法在/opt/apache/htdocs/ssi/time.shtml中解析expr"$ {DOCUMENT_URI} =/internet /":'$'附近的解析错误

我发现这个主题有很多变化,比如没有大括号,引号内部的括号,注释结束前的空格或=〜,但没有任何帮助.似乎没有mod_include的调试设置,这会告诉我什么是错的......

我发现的另一个变种是

<!--#if expr='"${DOCUMENT_URI}"=~/internet/'-->
Run Code Online (Sandbox Code Playgroud)

这没有错误.但它总是选择else分支,同样REQUEST_URI如下,好像变量未设置.但我可以很好地回应他们.我也试过/.+internet.+/,以防它锚定这个.

由于这些是CGI变量,我也尝试加载cgid_module - 也没有好处.

小智 10

从版本2.3.13开始,mod_include已切换到#if流控制元素中条件表达式的新ap_expr语法.

添加SSILegacyExprParser on指令以切换到与Apache HTTPD 2.2.x及更早版本兼容的旧语法.

http://httpd.apache.org/docs/current/mod/mod_include.html#ssilegacyexprparser

  • 您是否可以建议如何重写条件,而不是使用旧的条件表达式,以免使用不推荐的语法? (3认同)

小智 1

较新的 Apache 版本使用 ap_expr。我只是想添加相关链接:Apache docs。请注意,v 函数尚未记录。