2

我的网站使用 SSI(服务器端包含)来检查条件(使用#if expr)并根据条件是真还是假返回不同的 HTML 代码。这多年来一直运行良好,直到最近,我的网站开始显示错误[an error occurred while processing this directive]。我发现在较新版本的 Apache httpd 中语法发生了变化expr所以我假设我的托管服务提供商最近升级了 Apache httpd,这导致旧语法被破坏。Apache httpd 现在的版本是 2.4.29。

我设法通过添加SSILegacyExprParser on到我的.htaccess文件以返回旧语法暂时解决了这个问题(感谢这个问题)。但我想找到一个使用新语法的永久解决方案。

这是适用于的旧语法 SSI 代码SSILegacyExprParser on

<!--#if expr="${thisDoc} = /impressum\.shtml/" -->
<li id="current">
<!--#else -->
<li>
<!--#endif -->

(变量thisDoc已在前面设置。)

ap_expr这是使用不起作用的新语法的 SSI 代码。它[an error occurred while processing this directive]再次显示。在编写此代码时,我正在关注http://httpd.apache.org/docs/current/expr.html上的文档:

<!--#if expr="%{thisDoc} =~ /impressum\.shtml/" -->
<li id="current">
<!--#else -->
<li>
<!--#endif -->

我尝试过以各种方式修改语法,例如避免使用正则表达式匹配并改用精确字符串比较,但这也不起作用。我无法让一个表达式在新语法中工作。

为什么新语法不起作用?

4

0 回答 0