的Apache 2.4的查询字符串与正则表达式

问题描述:

好吧......试图让一条腿写SSI的新方法在2.4的Apache 2.4的查询字符串与正则表达式

任何SSI大师那里,可以帮助....我真的很感激它。

我有这样的代码,在

http://path-to-webpage?dynContent=AboutUs 

<!--#set var="dynContent" value="" --> 
<!--#if expr="$QUERY_STRING = /dynContent=([a-zA-Z0-9]+)/" --> 
<!--#set var="dynContent" value="$1" --> 
<!--#else --> 
<!--#set var="dynContent" value="default" --> 
<!--#endif --> 

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

与SSILegacyExprParser工作预期的反应是关于我们否则默认

我试图重新写这条线,使其工作在Apache 2.4中没有像这样的SSILegacyExprParser ....

<!--#set var="dynContent" value="" --> 
<!--#if expr="(%{QUERY_STRING} =~ /dynContent=([a-zA-Z0-9]+)/)" --> 
<!--#set var="dynContent" value="$0" --> 
<!--#else --> 
<!--#set var="dynContent" value="default" --> 
<!--#endif --> 

这部分工作。 我得到响应为dynContent =关于我们

我真的需要它来回馈公司简介否则退回到默认

任何想法,我怎样才能得到呢?

好吧......这花了大量的研究和一些运气.....主要是运气:-)

我得到这个工作....我明白老使用正则表达式PRE的Apache 2.4,但我不明白Apache 2.4后的正则表达式.....但我确实得到了这个工作。 这是我使用的代码。

<!--#set var="dynContent" value="" --> 
<!--#if expr="v('QUERY_STRING') =~ /(dynContent=)(.*)/ && $2 =~ /(.*)/" --> 
<!--#set var="dynContent" value="$0" --> 
<!--#else --> 
<!--#set var="dynContent" value="default" --> 
<!--#endif --> 

我现在可以在页面中使用它,以及一个变量的包括网页

<!--#echo var="dynContent" --> 
<!--#include virtual="/path-to-page/${dynContent}.shtml" --> 

如果有人可以解释这样对我......请你....我会喜欢尝试和理解它。

+0

解释是由于bug https://bz.apache.org/bugzilla/show_bug.cgi?id=57448只有$ 0可用,而$ 0是最后一个正则表达式的整个匹配字符串,所以片段“ && $ 2 =〜/(.*)“链接另一个正则表达式,其中$ 0成为整个匹配的字符串(匹配$ 2),因此您可以”走私“出一个正则表达式为$ 0 –