将所有URL重定向到Node.js中没有www的安全URL

时间:2019-07-01 04:26:13

标签: node.js express http redirect https

我正在使用下面的代码将我的所有流量重定向到不带www的https版本,即我的应用托管在一个子域中。它适用于以下情况:

以上所有内容均应重定向到 https://subdomain.domain.com

我正在我的Node.js应用程序中进行尝试。

app.use('*', function(req, res, next) {

    // https
    if (req.headers["x-forwarded-proto"] == "https") {

        // https with www
        if (req.headers.host.match(/^www/) !== null) {
            res.redirect(301, 'https://' + req.headers.host.replace(/^www\./, '') + req.url);
        }

        // https without www
        else {
            next();
        }
    }

    // http
    else {

        // http with www
        if (req.headers.host.match(/^www/) !== null) {
            res.redirect(301, 'https://' + req.headers.host.replace(/^www\./, '') + req.url);
        }

        // http without www
        else {
            res.redirect("https://subdomain.domain.com" + req.url);
        }
    }
});

我无法使重定向工作。对于第四个URL,即www.subdomain.domain.com,我也更新了DNS。

1 个答案:

答案 0 :(得分:0)

下面的代码片段检查URL是否不安全,它通过替换URL中的www重定向到https。

app.use('*',function(req, res, next){
 if (!req.secure) {
   res.redirect('https://' + req.headers.host.replace(/\/\/www\./, '') + req.url);
 }
 next();
})