javascript - 域感知反应路由器
问题描述
我有一个使用 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
文档...
新 URL 必须与当前 URL 同源;否则, pushState() 将抛出异常。
出于安全目的,子域被浏览器视为单独的来源,具有单独的CORS限制,因为它们通常指向不同的机器。
您能做的最好的事情是使用一些服务器端代码(例如 nginx 配置)将请求反向代理sally.herapp.com
到myapp.com/sally
. 这将在 处提供页面sally.herapp.com
,但仍需要往返于服务器。
您还不如拥有一个单独的 JS 捆绑包,其中每个子域都有自己的反应路由器实例,因为反应路由器无法在没有往返服务器的情况下跨子域链接,因此无论如何您都失去了单页应用程序的好处
推荐阅读
- javascript - ouath 3 使用 facebook 在登录期间截断问号
- javascript - 用承诺解决游标
- javascript - 如何将 React.memo 与 react-redux 连接一起使用?
- r - 动态确定数据框列是否存在,如果存在则改变
- javascript - 绑定 each 语句
- java - 从 Apache Http POST 请求返回字符串(Android)
- r - 唯一值的排序和有序数据框
- google-chrome - 从 Chrome 网上应用店中删除非活动谷歌开发者帐户的扩展
- javascript - Modernizr 将所有 _self 目标链接转换为 _blank
- list - 从列表列表中提取列表(Maxima)