使用正则表达式和 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
我正在使用 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