快速重定向错误的网址

时间:2018-07-06 19:45:42

标签: node.js express

使用express res函数redirect(url)时,我被重定向到错误的url!

我的网站URL是mywebsite.com:

function myroute(app) {
    app.get(/route, function(req, res) {
        var url = getMyUrl();
        console.log(url); // https://otherwebsite.com/foo?bar=baz [OK]
        res.redirect(url); // redirect to https://mywebsite.com/foo?bar=baz [WRONG!]
    });
}

我不知道为什么要使用良好的参数而不是otherwebsite.com来表示重定向到mywebsite.com

不知道为什么...

此错误在生产中发生。在我的开发环境中,重定向URL是好的URL。

预先感谢

编辑

我也尝试过:

res.location(url);

res.setHeader(302, {Location: url});

但是它总是重定向到错误的URL ... 我的url变量很好,但是我收到以下标头响应:

HTTP/1.1 302 Found
X-Powered-By: Express
Location: https://mywebsite.com/foo?bar=baz
Vary: Accept\r\nContent-Type: text/html; charset=UTF-8
Content-Length: 170
Date: Fri, 13 Jul 2018 21:52:18 GMT
Connection: keep-alive

编辑2

在这里进行更多测试:

res.redirect("https://www.google.fr/toto?key=value"); // https://mywebsite.com/toto?key=value **[fail]**

res.redirect("https://www.google.fr/toto"); // https://mywebsite.com/toto **[fail]**

res.redirect("https://www.google.fr"); // https://www.google.fr **[success]**

如果添加路径,它似乎无法重定向到我想要的域。有什么想法吗?

编辑3

可能是我的虚拟主机引起的吗?

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mywebsite.com

ProxyRequests     Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5001/
<Location />
    ProxyPassReverse /
    Order deny,allow
    Allow from all
</Location>

SSLCertificateFile ...
SSLCertificateKeyFile ...
</VirtualHost>
</IfModule>

2 个答案:

答案 0 :(得分:2)

我认为需要包括301

尝试将res.redirect(url)更改为res.status(301).redirect(url),看看是否可以解决问题。

答案 1 :(得分:2)

这次提供了一个实际的答案,因为我的上一个答案(理应如此)被删除了。

错误的URL重定向肯定是由以下原因引起的:

ProxyPassReverse /

该指令的作用是this

“让Apache httpd调整HTTP重定向响应上Location,Content-Location和URI标头中的URL。”

就我而言,删除此指令会在应用程序中引起其他内部重定向问题,因此我试图寻找一种向其添加异常的方法。

但是,事实证明,如果我调整Express节点js配置的“ mountpath”以匹配代理服务器的路径,则不需要ProxyPassReverse(仅需要ProxyPass)。不知道这个答案是否可以为您提供实际的解决方案,但是它设法使用Apache作为反向代理在我的节点应用程序上解决了这个问题。