我的网站使用SSI(服务器端包含)来检查条件(使用#if expr
)并根据条件是真还是假来返回不同的HTML代码。这曾经工作多年,直到最近,我的网站开始显示错误[an error occurred while processing this directive]
。我发现the expr
syntax changed in newer versions of Apache httpd,所以我假设我的托管服务提供商最近升级了Apache httpd并导致旧语法中断。 Apache httpd现在版本为2.4.29。
我设法通过将SSILegacyExprParser on
添加到我的.htaccess
文件来暂时解决问题,以恢复旧语法(感谢this question)。但我想找到一个使用新语法的永久解决方案。
以下是与SSILegacyExprParser on
一起使用的旧语法SSI代码:
<!--#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 -->
我尝试过以各种方式修改语法,例如避免使用正则表达式匹配并使用精确的字符串比较,但这也不起作用。我无法在新语法中使用单个表达式。
为什么新语法不起作用?