0

我正在使用 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" )
}

尝试重新启动 lig​​httpd 时出现此错误:

无法访问的其他条件 2012-10-17 11:34:10: (configfile.c.918) 源:/etc/lighttpd/lighttpd.conf 行:173 位置:14 解析器在此处附近以某种方式失败:(EOL)

谢谢 !

4

1 回答 1

0

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

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

于 2012-10-17T09:45:16.677 回答