gpt4 book ai didi

javascript - 在 Elastic Beanstalk 上使用 Node/Express 重定向到 HTTPS

转载 作者:搜寻专家 更新时间:2023-10-31 23:23:57 27 4
gpt4 key购买 nike

我正在尝试让网站强制使用 HTTPS(从 HTTP 重定向)。我们已经通过 AWS Elastic Beanstalk 设置了 HTTPS。问题是,目前,HTTP 和 HTTPS 都可以使用。

阅读几篇文章后,包括 this one ,下面的代码是我想出的。不幸的是,这不起作用。

我错过了什么?

import express from 'express';
import { join } from 'path';

const app = express();
const buildPath = join(`${__dirname}/../build`);
const enforceHTTPS = (req, res, next) => {
if (req.headers['x-forwarded-proto'] === 'https') return next();
else return res.redirect(301, join(`https://${req.hostname}${req.url}`));
};

app.use(express.static(buildPath));
app.use(enforceHTTPS);
app.get('*', (req, res) => res.sendFile(`${buildPath}/index.html`));
app.listen(process.env.PORT || 3000, () => console.log('Server running on port 3000!'));

export default app;

最佳答案

事实证明,我只需重新排序我的 app.use 语句 — 提供静态文件之前调用重定向。

此外,为了使其在 IE/Edge 上运行,“https://”需要移到 path.join 之外(join 删除了第二个正斜杠,尽管所有其他主要浏览器都会正确处理它, IE 不喜欢它)。

这是一个工作示例:

import express from 'express';
import { join } from 'path';

const app = express();
const buildPath = join(`${__dirname}/../build`);
const enforceHTTPS = (req, res, next) => {
if (req.headers['x-forwarded-proto'] === 'https') return next();
return res.redirect(301, `https://${join(req.hostname, req.url)}`);
};

app.use(enforceHTTPS);
app.use(express.static(buildPath));
app.get('*', (req, res) => res.sendFile(`${buildPath}/index.html`));
app.listen(process.env.PORT || 3000, () => console.log('Server running on port 3000!'));

export default app;

关于javascript - 在 Elastic Beanstalk 上使用 Node/Express 重定向到 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39844092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com