Project

General

Profile

Actions

HowToRedirectHttpToHttps » History » Revision 27

« Previous | Revision 27/33 (diff) | Next »
gstrauss, 2020-06-01 06:18


How to redirect HTTP requests to HTTPS

redirect everything

$HTTP["scheme"] == "http" {
            url.redirect = ("" => "https://${url.authority}${url.path}${qsa}")
}

redirect everything, but not for connections from IPv4 or IPv6 localhost

$HTTP["scheme"] == "http" {
    $SERVER["socket"] != "127.0.0.1:80" {
        $SERVER["socket"] != "[::1]:80" {
            url.redirect = ("" => "https://${url.authority}${url.path}${qsa}")
        }
    }
}

redirect specific url from http to https

$HTTP["scheme"] == "http" {
            url.redirect = ("^/phpmyadmin/" => "https://${url.authority}${url.path}${qsa}")
}

redirect specific vhost and url from http to https

$HTTP["scheme"] == "http" {
    $HTTP["host"] == "sth.example.com" {
            url.redirect = ("^/phpmyadmin/.*" => "https://sth.example.com$0")
    }
}

redirect everything from a non-standard port (i.e. not 80) from http to https

https://stackoverflow.com/questions/62109311/lighttpd-redirect-from-custom-http-port-81-to-https-port-443

$HTTP["scheme"] == "http" {
    $HTTP["host"] =~ "(.*)(:[0-9]+|)$" {  ## %1 contains hostname without port
        url.redirect = ("" => "https://%1${url.path}${qsa}")
    }
}

Earlier versions of lighttpd 1.4.x before lighttpd 1.4.50 may replace the url.redirects above with a combination of regexes:

redirect everything from http to https

$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")
    }
}

redirect specific url from http to https

$HTTP["scheme"] == "http" {
    $HTTP["host"] =~ ".*" {
        url.redirect = ("^/phpmyadmin/.*" => "https://%0$0")
    }
}

Updated by gstrauss almost 4 years ago · 27 revisions