表达式如何在apache 2.4中运行?

时间:2013-02-14 15:19:47

标签: apache2 expression ssi

将服务器从2.2版升级到2.4后,Server Side Include中的某些表达式不再有效,给我一系列错误:

  

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

据我所知,这是由于某些ongoing effort只为所有配置指令使用了一个名为 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 -->

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

2 个答案:

答案 0 :(得分:1)

警告

我确实尝试激活指令:

  

上的SSILegacyExprParser

(如上文评论中所述)

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

不再好{{echo var ='var1'}}

请注意,如果OLD注释语法出现在属性&gt;中,XHTML编辑器将会选择: - (

答案 1 :(得分:1)

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

<!--#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它被捕获了)。我发现正则表达式的一些问题并不像预期的那样工作,例如,像这样的表达式来确定我是否正在查看当前目录或子文档的工作量。最后一行确实匹配以&#34; /&#34;结尾的URI,但我失去了几个小时,发现%{REQUEST_URI}不起作用,只有v(&#39; REQUEST_URI&#39;)表单(不知怎的,我希望找到相反的东西)。

<!--#if expr="((v('REQUEST_URI') =~ m_/index.shtml_)
            || (v('REQUEST_URI') =~ m_/index.html_)
            || (v('REQUEST_URI') =~ m_/index.cgi_)
            || (v('REQUEST_URI') =~ m_/$_))" -->