lighttpd 配置中的 $0 和 %0 是什么?

what is $0 and %0 in lighttpd configuration?

所以在这个文档中, https://redmine.lighttpd.net/projects/lighttpd/wiki/HowToRedirectHttpToHttps

$HTTP["scheme"] == "http" {
    # capture vhost name with regex conditiona -> %0 in redirect pattern
    # must be the most inner block to the redirect rule
    $HTTP["host"] =~ ".*" {
        url.redirect = (".*" => "https://%0[=10=]")
    }
}

http://1.2.3.4/dir/ 请问 %0 是什么,$0 是什么?

谢谢!

这些是 RegEx 符号。根据您的 lighttpd 配置,符号是这样解析的。

%0 - 您的主机名(或虚拟主机名,如 ftp.website.com)

[=13=] - 目录,如果有(如 /files 等)

这里的%0会被$HTTP["host"]中的正则表达式".*"匹配的字符串替换,而[=13=]只是根据正则表达式放在主机名字符串的末尾".*" 并将目录名称放在末尾。 (例如 /files 、 /index 等)

编辑:请注意 $ 指的是目录路径,% 指的是主机名。通常,如果除了 ".*" 之外没有正则表达式条件,我们只会在末尾附加 0 以按原样显示主机名或目录路径。但是,如果我们使用 RegEx 修改要重写的 hostname/directory 路径,我们会根据 RegEx(子表达式)的位置附加 1,2 等。请看下面的示例以了解您的理解。

关于 , - 当目录位有多个正则表达式时使用这些。例子和解释

url.redirect = ( "^/show/([0-9]+)/([0-9]+)$" => "http://www.example.org/show.php?isdn=&page",
             "^/get/([0-9]+)/([0-9]+)$"  => "http://www.example.org/get.php?isdn=&page" )

观察上面示例中的正则表达式 ^/show/([0-9]+)/([0-9]+)$。请注意,/ 指的是目录反斜杠。 RegEx 是 ([0-9]+),它只接受所有数字,^ 符号表示字符串的开头,美元符号 $,表示 [=98] 的结尾=]. ^$ 符号是强制性的,因此它们不会包含在正则表达式编号中。

假设从 lighttpd 服务器请求目录 /show/3/4

$0 指目录路径 /show/3/4 原样

$1 指的是从第一个正则表达式条件 ([0-9]+) 接收到的输出,位于 /show/([0-9]+)$ 之间,在本例中为 3

$2 指的是从第二个(也是最后一个)正则表达式条件 ([0-9]+) 接收到的输出,该条件位于 $ 之前的末尾,在本例中为 4.

所以最后 </code> 和 <code> 得到解决。这将解析并将 /show/3/4 之类的目录路径 URI 重定向到 http://www.example.org/get.php?isdn=3&page4

然而,如果你用 $0 替换 $1 和 $2,你会得到这样的结果 http://www.example.org/show.php?isdn=/show/3/4/&page/show/3/4/

当您为 API 创建重写时,这并不是您想要的。

关于 %1,%2 ,当主机名有多个正则表达式时使用这些。例子和解释

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

我们上面给出的主机名的正则表达式是 ^www\.(.*)$,它匹配 URI 字符串 www. 之前的所有内容。通过为 URL 提及 %1,RegEx 将应用于主机名。

您可以看到目录路径也有一个单独的 RegEx。目录路径的正则表达式是 ^/(.*),它匹配除换行符以外的所有内容。通过提及 </code>,RegEx 应用于目录路径。 在这里我们可以看到 <code>%$ 是组合使用的。

这个特殊的正则表达式只是将 www link 转换为 http。 示例输入和输出 http://www.example.com/test1 将转换为 http://example.com/test1

希望这能消除困惑。

More info :

$1-$9 是 url.redirect 或 url.rewrite 语句

的正则表达式匹配

%1-%9 是 $HTTP[...] =~ 或 !~ 条件的正则表达式匹配,其中包含 url.redirect 或 url.rewrite 语句,如果 url.redirect 或 url.rewrite 语句在正则表达式条件内

$0 或 %0 是相应正则表达式匹配的整个字符串,即使未使用正则表达式捕获(括号)也是如此。