为什么React Router重定向Nginx服务器上的所有请求?

时间:2018-10-19 17:47:13

标签: reactjs nginx

我在nginx服务器上的/下部署了一个React应用。我在/old下部署了一个旧的Django应用。

如果我打开新的浏览器窗口并直接访问/old,则可以毫无问题地访问Django应用。如果我首先打开React应用,则以下所有对/old的请求都会重定向到React应用。只能通过关闭浏览器窗口(选项卡不够)来清除它。

反应路由器:

function render(location) {
  Router.resolve(routes, location)
    .then(renderComponent)
    .catch((error) => {
        console.log(error);
    });
}

Nginx配置:

location /old {
    proxy_redirect off;
    uwsgi_pass unix:///var/run/uwsgi.sock;
    uwsgi_intercept_errors on;
}

location / {
    root /var/www;
    try_files $uri /index.html;
}

免责声明:我不是react应用的开发人员,对此知之甚少。我很确定我的nginx配置正确。相反,我认为这是由于某些重定向缓存/浏览器foo react正在执行,但是我不知道如何停止它。

有帮助吗?

1 个答案:

答案 0 :(得分:1)

React应用程序具有一个客户端路由器,该路由器拦截页面点击并且不向服务器发出HTTP GET请求,而是向浏览器路由器发出请求。

这可以解释为什么在干净的浏览器会话中,您可以访问预期的/old Django应用程序,因为最初的GET请求必须始终路由到服务器。

在这些情况下,尚未加载React应用,因此无法使用客户端路由器。但是,当您访问/路由并加载React时,客户端路由器将对其进行踢打,并拦截所有后续请求。

从理论上讲,您可以通过将某些路由(如/old列入白名单来解决此问题,而不是将这些路由传递到路由器,而只是像window.location = https://yoursite.com/old那样进行浏览。