使用正则表达式和 SSI 获取 DOCUMENT_URI 的部分内容

Get parts of DOCUMENT_URI using regex and SSI

我正在使用 Apache 2.4 和服务器端包含。

当我使用这个时:

<!--#echo var="DOCUMENT_URI" -->

它returns:/foo/bar/file.html

我想捕获 URI 的部分,即:

  <!--#if expr='v("DOCUMENT_URI") =~ [\/\](.+)[\/\](.+)[\/\](.+)[.]'-->
    <!--#set var='URI_PART1' value='' -->
    <!--#set var='URI_PART2' value='' -->
    <!--#set var='URI_PART3' value='' -->
  <!--#else -->
  <!--#endif -->

我尝试了很多变体,但无论如何都无法让 Apache 识别正则表达式。我原本希望记录 "foo"、"bar" 和 "file",但却收到错误 [处理此指令时发生错误]。

我知道自 Apache 2.4 以来语法发生了变化,以上是我根据对新语法的理解得出的结果..

感谢任何帮助!

好的,所以有很多 Apache 2.4 之前的文档,非常令人困惑。

答案是您不能将匹配表达式的 $1、$2 等部分隔离出来,除非它要在另一个 #if 表达式中使用。

即你不能用字符串的 $1 部分#set一个新变量。

不确定为什么此功能不再可用,但是是的。给你。

这是一个错误,但未解决:https://bz.apache.org/bugzilla/show_bug.cgi?id=57448

评论 8 中展示了一种变通方法,通过添加以下片段通过 $0 提取单个值:

&&  =~ /(.*)

将 $1 映射到 $0,因为 $0 已正确导出。

因此您必须一次提取一个零件。

另一种解决方法是启用并使用 SSILegacyExprParser