将服务器从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 -->
如果有人能指出上述内容会如何改变以便让我开始,我将不胜感激。谢谢!
答案 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_/$_))" -->