【问题标题】:How does expression work in apache 2.4?表达式在 apache 2.4 中如何工作?
【发布时间】:2013-02-14 15:19:47
【问题描述】:

在我将服务器从 2.2 版本升级到 2.4 后,Server Side Include 中的某些表达式不再起作用,给我带来了一系列错误:

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

我知道这是由于某些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 -->

如果有人能指出如何更改上述内容以帮助我入门,我将不胜感激。谢谢!

【问题讨论】:

  • 看看这个httpd.apache.org/docs/2.4/mod/… 似乎你必须打开它才能使用旧语法。
  • @244an,是的,我已经看到了。只是想学习新语法,以防将来不推荐使用该选项。

标签: apache2 expression ssi


【解决方案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,因为我昨晚刚刚转换的东西没有这样的用途(一些人认为它可能只能在 same 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_/$_))" -->

【讨论】:

    【解决方案2】:

    警告

    我确实尝试过激活指令:

    SSILegacyExprParser 开启

    (如上文评论所述)

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2018-09-14
      • 2016-01-31
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多