Lighttpd的重定向仅适用于整个正则表达式的括号

时间:2012-10-17 09:37:01

标签: regex redirect lighttpd

我正在使用lighttpd 1.4.28

这是我的重定向规则:

$HTTP["host"] =~ "^([^.]+\.[^.]+)$" {
        url.redirect = ( "^/(.*)" => "http://www.%0/$1" )
}

它应该将anydomain.anytld重定向到www.anydomain.anytld,它就像我在这里写的一样魅力(当然,使用%1也有效,因为它引用了括号。)

然而,我很困惑为什么它只适用于您在触发器正则表达式中可以看到的一对括号。

%0应该抓住整个结果,不是吗?它甚至没有引用一对括号,不像%1,%2等。但是如果我删除那些括号,就像这样:

$HTTP["host"] =~ "^[^.]+\.[^.]+$" {
        url.redirect = ( "^/(.*)" => "http://www.%0/$1" )
}

尝试重启lighttpd时出现此错误:

  

无法达到的其他条件2012-10-17 11:34:10:(configfile.c.918)   来源:/etc/lighttpd/lighttpd.conf行:173 pos:14解析器失败   不知何故在这附近:(EOL)

谢谢!

1 个答案:

答案 0 :(得分:0)

这是因为%0匹配整个子字符串或第一个表达式,根据定义,它是封闭的()集合。这将允许您使用更复杂的正则表达式与嵌套(即((())))括号,并拉动它的全部。根据我的理解,这是Lighttpd的正则表达式解析器的构造。

http://redmine.lighttpd.net/projects/1/wiki/Docs_ModRewrite