从http重定向到https部分失败

时间:2015-09-14 20:28:51

标签: node.js heroku express handlebars.js

我使用此代码段将每个http-request转发给https-request

 app.get('*', function (req, res, next) {
 if (req.headers['x-forwarded-proto'] != 'https') {

     res.redirect(req.connection.remoteAddress);
 }
 else {
     next();
 }
 })

如果您输入example.com,则会转到https://example.com/,这很好。

但如果您输入http://example.com/someparam,请转到http://example.com/::ffff:10.45.53.139

这很奇怪,因为如果你直接在浏览器中输入https://example.com/someparam就行了。

从后端我得到xyz.herokuapp.com的代码,但是如果我输入xyz.herokuapp.com,它也会得到一个奇怪的结果http://xyz.herokuapp.com/::ffff:10.45.79.55

但使用此https://xyz.herokuapp.com/有效......

好像重定向两次吧?!

1 个答案:

答案 0 :(得分:0)

我认为req.connection.remoteAddress指的是请求来自的IP地址 - 因此您不希望重定向到该地址。我假设您希望在保留路径的同时使用https重定向到您自己的域。这应该重定向并保留路径:

if(req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect('https://' + req.get('host') + req.originalUrl);
}