jab*_*tta 5 javascript https node.js express amazon-elastic-beanstalk
我试图让一个网站强制使用 HTTPS(从 HTTP 重定向)。我们已经通过 AWS Elastic Beanstalk 设置了 HTTPS。问题是,目前,HTTP 和 HTTPS 都可以使用。
在阅读了几篇文章后,包括这篇文章,下面的代码就是我想出的。不幸的是,这不起作用。
我错过了什么?
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;
Run Code Online (Sandbox Code Playgroud)
事实证明,我只需重新排序我的 app.use 语句 \xe2\x80\x94 调用重定向在提供静态文件之前重新排序我的 app.use 语句 \xe2\x80\x94 调用重定向即可。
\n\n此外,为了使其在 IE/Edge 上运行,需要将“https://”移至 path.join 之外(join 会删除第二个正斜杠,尽管所有其他主要浏览器都会正确处理它,但 IE 不会)不喜欢)。
\n\n这是一个工作示例:
\n\nimport express from 'express';\nimport { join } from 'path';\n\nconst app = express();\nconst buildPath = join(`${__dirname}/../build`);\nconst enforceHTTPS = (req, res, next) => {\n if (req.headers['x-forwarded-proto'] === 'https') return next();\n return res.redirect(301, `https://${join(req.hostname, req.url)}`);\n};\n\napp.use(enforceHTTPS);\napp.use(express.static(buildPath));\napp.get('*', (req, res) => res.sendFile(`${buildPath}/index.html`));\napp.listen(process.env.PORT || 3000, () => console.log('Server running on port 3000!'));\n\nexport default app;\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |