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
希望这能消除困惑。
$1-$9 是 url.redirect 或 url.rewrite 语句
的正则表达式匹配
%1-%9 是 $HTTP[...] =~ 或 !~ 条件的正则表达式匹配,其中包含 url.redirect 或 url.rewrite 语句,如果 url.redirect 或 url.rewrite 语句在正则表达式条件内
$0 或 %0 是相应正则表达式匹配的整个字符串,即使未使用正则表达式捕获(括号)也是如此。
所以在这个文档中, 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
希望这能消除困惑。
$1-$9 是 url.redirect 或 url.rewrite 语句
的正则表达式匹配%1-%9 是 $HTTP[...] =~ 或 !~ 条件的正则表达式匹配,其中包含 url.redirect 或 url.rewrite 语句,如果 url.redirect 或 url.rewrite 语句在正则表达式条件内
$0 或 %0 是相应正则表达式匹配的整个字符串,即使未使用正则表达式捕获(括号)也是如此。