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