我正在运行一个安装了 SSL 证书的 lighttpd 服务器。出于某些原因,我想将所有 https://www. 请求转发到 http://www.
我的lighttpd代码如下:
$SERVER["socket"] == ":443"
{
ssl.engine = "enable"
ssl.pemfile = "/path/to/pem/file"
ssl.ca-file = "/path/to/ca/file"
HTTP["host"] =~ "^www\.(.*)$" {
url.redirect = ("^/(.*)" => "http://www.%1$1")
}
}
您能指出这里的问题吗?另外,%1 和 $1 之间有什么区别?
答案1
我用过这个:
$HTTP["scheme"] == "https" {
$HTTP["host"] =~ "example.com" {
url.redirect = ( "^/(.*)" => "http://www.example.com/$1" )
}
}
但要小心,有些浏览器会记住网站使用https
。因此,无论向网络服务器发送什么重定向,它都会始终尝试访问 版本https
。我试过这种情况,Firefox / Chrome 告诉我我的网站进入了无限重定向循环。但是当我在 上滚动我的网站时https
,我得到了 301 到http
。然后是http
200。
所以测试起来很困难...
对于你的第二个问题,在文档中:
请注意,url.redirect 目标中的“%1”指的是条件正则表达式 (.*) 中的括号子表达式。它不一定具有“%1”在 evhost.path-pattern 中的含义(其中它表示“顶级域”)。如果在正则表达式条件中指定了 url.redirect,则 % 模式将被条件正则表达式中的相应组替换。%1 将被替换为第一个子表达式,%2 将被替换为第二个子表达式,等等。%0 将被替换为与正则表达式匹配的整个子字符串。有关使用 % 模式的示例,请参见上文和下文。