我有一个使用 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/