我在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正在执行,但是我不知道如何停止它。
有帮助吗?
答案 0 :(得分:1)
React应用程序具有一个客户端路由器,该路由器拦截页面点击并且不向服务器发出HTTP GET
请求,而是向浏览器路由器发出请求。
这可以解释为什么在干净的浏览器会话中,您可以访问预期的/old
Django应用程序,因为最初的GET
请求必须始终路由到服务器。
在这些情况下,尚未加载React应用,因此无法使用客户端路由器。但是,当您访问/
路由并加载React时,客户端路由器将对其进行踢打,并拦截所有后续请求。
从理论上讲,您可以通过将某些路由(如/old
列入白名单来解决此问题,而不是将这些路由传递到路由器,而只是像window.location = https://yoursite.com/old
那样进行浏览。