lighttpd配置中的$ 0和%0是多少?

时间:2016-07-24 20:48:09

标签: lighttpd

所以在这个文档中, 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$0")
    }
}

http://1.2.3.4/dir/ 什么是%0,什么是0美元好吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

$0 - 目录,如果有的话(比如/ files等)

此处%0将被匹配".*"中的regexp $HTTP["host"]的字符串替换,而$0只会根据正则表达式放置主机名字符串的末尾{{ 1}}并将目录的名称放在最后。 (例如,/ files,/ index等)

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

关于".*" - 当目录位有多个正则表达式时使用这些。示例和说明

$1,$2

在顶部示例中观察正则表达式 url.redirect = ( "^/show/([0-9]+)/([0-9]+)$" => "http://www.example.org/show.php?isdn=$1&page$2", "^/get/([0-9]+)/([0-9]+)$" => "http://www.example.org/get.php?isdn=$1&page$2" ) 。请注意,^/show/([0-9]+)/([0-9]+)$引用目录反斜杠。 RegExes是/,它只接受所有数字,([0-9]+)符号表示字符串的开头,美元符号^表示字符串/链接结束。 $^符号是必需的,因此这些符号不会包含在正则表达式编号中。

假设从lighttpd服务器请求目录$

$ 0指的是目录路径/show/3/4,因为它是

$ 1是指从位于/show/3/4([0-9]+)之间的第一个正则表达式/show收到的输出,在这种情况下是3

$ 2指的是从/([0-9]+)$之前的末尾放置的第二个(和最后一个)正则表达式条件([0-9]+)收到的输出,在这种情况下它是4。

最后,$$1得到解决。这将解析并将$2之类的目录路径URI重定向到/show/3/4

然而,如果你用$ 0替换$ 1和$ 2,你会得到类似的东西 http://www.example.org/get.php?isdn=3&page4

在为API创建重写时,并不完全符合您的要求。

关于http://www.example.org/show.php?isdn=/show/3/4/&page/show/3/4/,当主机名有多个正则表达式时,会使用这些。示例和说明

%1,%2

这里我们上面给出的主机名的正则表达式是$HTTP["host"] =~ "^www\.(.*)$" { url.redirect = ( "^/(.*)" => "http://%1/$1" ) } ,它匹配URI字符串^www\.(.*)$之前的所有内容。通过提及www.的URL,RegEx将应用于主机名。

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

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

希望这可以消除困惑。

More info :

答案 1 :(得分:0)

$ 1- $ 9是url.redirect或url.rewrite语句的正则表达式匹配

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

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