gpt4 book ai didi

Node .js : redirecting urls from http to https working well with all my urls except one

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:36 25 4
gpt4 key购买 nike

我有我的证书和 key ,它们在我的网站上运行良好,现在我需要将我的网址从 http 重定向到 https 网址。我的 http 端口是 5000,我的 https 端口是 443,因此要从这样的 http 链接重定向:http://localhost:5000/signin 到 https 链接,它将像 https://localhost/signin

所以我创建了这段代码,它在我的所有网址上都没有任何问题

function requireHTTPS(req, res, next) {
if (!req.secure) {
var domain = "https://" + req.hostname;
if (process.env["SSL_PORT"]) {
domain = domain.replace(/:\d+$/, "");
domain += ":" + process.env["SSL_PORT"];
}
//FYI this should work for local development as well
return res.redirect(domain + req.url);
}
next();
}

app.use(requireHTTPS);

除了这个网址:http://localhost:5000/

它应该重定向到类似的内容:https://localhost/

但它总是给我这个结果:https://localhost:5000/

它给了我这个错误?

An error occurred during a connection to localhost:5000. PR_END_OF_FILE_ERROR

那么如何正确重定向?

“/”路径

app.get('/', function(req, res) {
if(req.user === undefined) {
res.render('visitorsindex');
} else {
res.redirect('/themainpage');
}
});

最佳答案

看来您的问题出在这一行:

domain = domain.replace(/:\d+$/, "");

此正则表达式匹配冒号以及字符串末尾的 1 个或多个数字。因此,以下内容将起作用:

http://localhost:5000 变为 http://localhost

但这不会:

http://localhost:5000/ 变为 http://localhost:5000/

为什么?因为端口号不在字符串的末尾; “/”字符是。

您可以将正则表达式更改为以下内容:

domain = domain.replace(/:\d+[/]?$/, "");

此正则表达式可以选择在字符串末尾包含“/”。

但这只会匹配没有路径的 URL。您可以进一步扩展正则表达式来处理路径,但更好的解决方案是使用node.js URL module以安全的方式解析 URL 并更改端口。

关于 Node .js : redirecting urls from http to https working well with all my urls except one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57632842/

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