javascript - 域感知 React 路由器

标签 javascript reactjs react-router hostname

我有一个使用 React Router 的应用程序,并根据以下路径提供内容。在此示例中,Sally 和 Sunny 在以下 url 处拥有自己的页面,

  • www.myapp.com/sally
  • www.myapp.com/sunny

现在我想做的是当请求来自另一个主机时匹配其中每一个,如下所示,

  • sally.herapp.com <-- 匹配并提供在 www.myapp.com/sally 上找到的相同内容
  • sunny.hisapp.com <-- 匹配并提供在 www.myapp.com/sunny 上找到的相同内容

我想要的是使用相同的应用程序,并让它在不同的子域和域上匹配和服务器路由/sally 和/sunny。需要明确的是,我分别在 herapp.com hisapp.com 上有 sally 和 sunny 的 DNS CNAME 条目。

React Router 可以做到这一点吗?谢谢!

最佳答案

这不能用 React Router 来完成。 React Router 使用历史记录 API 推送新的 url 状态而不触发页面刷新。它通过调用window.history.pushState来做到这一点,如果您传递不同的源(子域),则会抛出错误。来自 pushState 文档...

The new URL must be of the same origin as the current URL; otherwise, pushState() will throw an exception.

子域名被浏览器视为单独的来源,具有单独的 CORS出于安全目的的限制,因为它们通常指向不同的机器。

您能做的最好的事情就是使用一些服务器端代码(例如 nginx 配置)将请求从 sally.herapp.com 反向代理到 myapp.com/sally。这将在 sally.herapp.com 上提供页面,但仍然需要往返服务器。

您可能还需要为每个子域创建一个单独的 JS 包,其中包含自己的 React Router 实例,因为 React Router 无法在不往返服务器的情况下跨子域链接,因此您失去了单页面应用程序的优势无论如何

关于javascript - 域感知 React 路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58071407/

相关文章:

javascript - React 命名类组件与匿名类组件

reactjs - 在所有路线上 react 加载屏幕?

javascript - Kendo UI 颜色选择器不显示选择颜色的对话框

javascript - 在 if 语句中使用 "!!"不是多余的吗,因为 if 语句已经检查是否为真?

javascript - 使用基本身份验证的跨域 AJAX?

javascript - 只将单个元素插入数组

javascript - react API 获取失败

javascript - React-router 与有效路由不匹配

javascript - React- Router,理解转换

javascript - 为什么我的异步函数不与回调结合产生结果?