6

将服务器从 2.2 升级到 2.4 后,Server Side Include 中的某些表达式不再起作用,出现一系列错误:

AH01337:无法解析 /var/www/err/ft.html.var 中的 expr“$SERVER_NAME = abc”:“$”附近的解析错误
AH01337:无法解析 /var/www/err 中的 expr“!$REDIRECT_STATUS” /tp.html: '$' 附近的解析错误
AH01337: 无法解析 /var 中的 expr "$HTTP_HOST = /^([az]{2}\.)abc\.com/ && $SERVER_NAME = abc\.com" /www/err/tp.html: '$' 附近的解析错误

我知道这是由于一些持续的努力只为所有配置指令使用一个名为ap_expr的变体。但是,在阅读了文档之后,我仍然不知道如何转换我的一些旧代码以反映这种变化:

<!--#if expr="! $REDIRECT_STATUS" -->
<!--#set var="REDIRECT_STATUS" value="404" -->
<!--#endif -->
<!--#if expr="$HTTP_HOST = /^([a-z]{2}\.)abc\.com/ && $SERVER_NAME = abc\.com" -->
<!--#set var="subdomain" value="$1" -->
<!--#else -->
<!--#set var="subdomain" value="" -->
<!--#endif -->

如果有人能指出如何改变上述内容以让我开始,将不胜感激。谢谢!

4

2 回答 2

2

我希望如果您对新语法感兴趣,您最终会得到这样的结果:

<!--#if expr="-z %{REDIRECT_STATUS}" -->
<!--#set var="REDIRECT_STATUS" value="404" -->
<!--#endif -->
<!--#if expr="v('HTTP_HOST') =~ /^([a-z]{2}[.])abc[.]com/
           && v('SERVER_NAME') == 'abc.com'" -->
<!--#set var="subdomain" value="$1" -->
<!--#else -->
<!--#set var="subdomain" value="" -->
<!--#endif -->

我不确定 1 美元,因为我在昨晚刚刚转换的内容中没有这样的用途(一些人认为它可能只能在捕获它的同一个expr 中使用)。我发现正则表达式没有按预期工作的一些问题,例如,像这样的表达式来确定我正在查看的内容相当于当前目录还是子文档有效。最后一行确实匹配以“/”结尾的 URI,但我花了几个小时才发现 %{REQUEST_URI} 不起作用,只有 v('REQUEST_URI') 形式(不知何故我希望找到相反的真实为了某件事)。

<!--#if expr="((v('REQUEST_URI') =~ m_/index.shtml_)
            || (v('REQUEST_URI') =~ m_/index.html_)
            || (v('REQUEST_URI') =~ m_/index.cgi_)
            || (v('REQUEST_URI') =~ m_/$_))" -->
于 2014-09-02T14:01:22.030 回答
1

警告

我确实尝试过激活指令:

SSILegacyExprParser on

(如上面评论中所述)

但是这也杀死了我的 SSIStartTag 配置..

没有更好的 {{echo var='var1'}}

请注意,如果 OLD 注释语法出现在属性中,XHTML 编辑器会阻塞 >:-(

于 2013-04-18T18:30:48.203 回答