我有一个在Heroku上运行的应用程序,我正在尝试确保URL始终具有https://,即使用户没有提供它也是如此。
使用以下配置,当用户在URL上提供http://example.com时,我可以将其替换为http:// for https://。但是当用户没有提供http://(当他只提供example.com时)时仍然无效:
var express = require('express');
var path = require('path');
var serveStatic = require('serve-static');
var forceSsl = function (req, res, next) {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(['https://', req.get('Host'), req.url].join(''));
}
return next();
};
app = express();
app.use(serveStatic(__dirname));
if(process.env.NODE_ENV === 'production') {
app.use(forceSsl);
}
var port = process.env.PORT || 5000;
app.listen(port);
app.all('/*', function(req, res) {
res.sendfile('index.html');
});
console.log('server started '+ port);
我怎么能实现这个目标?
修改
我没有配置SSL的问题。当用户在URL上提供http://或https://前缀时,它工作正常。问题是当用户不提供此前缀时。在这种情况下,浏览器不会自动添加http:// both https://,然后SSL不适用。