部署到 github 页面的 create-react-app 链接出现 404 错误

2024-02-27

我正在尝试将 create-react-app 部署到具有自定义域的 GitHub 页面上的相对路径。例如。www.example.com/myproject

我在用着react-router-dom, react-router-redux and react-router-bootstrap

我已将主页设置为http://www.example.com/myproject in packages.json (tried homepage = "."也)并为我的历史配置了基本名称:

...
export const history = createHistory({ basename: '/myproject' });
const middleware = [thunk, routerMiddleware(history)];
...
const composedEnhancers = compose(applyMiddleware(...middleware), ...enhancers);
const store = createStore(rootReducer, initialState, composedEnhancers);

部署的应用程序适用于www.mydomain.com/myproject我可以通过应用程序链接进行导航。

但是当我尝试直接输入路径时,我得到了 404(例如www.example.com/myproject/account)或者如果我在子页面上刷新浏览器。

长期目标是为开发和生产环境配置不同的相对路径,如中所述这个答案 https://stackoverflow.com/a/42825400/4006001但首先我只需要让它在部署中工作。


问题:URL 在服务器端进行评估

当您在浏览器的地址栏中输入新的 URL 或刷新页面时,浏览器会向服务器(在本例中为 GitHub Pages 服务器)请求该 URL。此时,客户端路由器(react-router)无法采取行动,因为它尚未为该页面加载。现在服务器寻找匹配的路由/accounts找不到它(因为路由是在客户端完成的)并返回404.

Solution

如果您可以控制服务器,则可以提供服务index.html对于所有路线。 创建反应应用程序文档对此进行了解释通过客户端路由为应用程序提供服务 https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#serving-apps-with-client-side-routing。 由于我们在 GitHub 页面上没有这种控制权,因此我们可以尝试这些。

简单的解决方案

切换自browserHistory to hashHistory通过此更改,您的 URL 将不再是这样

www.example.com/myproject/account

to

www.example.com/myproject/#/account

所以有点乱。

更难的解决方案

获取要重定向到的 GitHub 页面index.html根据所有要求。基本上你必须添加一个404.html在您的构建目录中,其中包含要重定向到的代码index.html. 更多关于如何做到这一点的信息 https://github.com/rafrex/spa-github-pages.

创建 React App 有GitHub 页面中有关客户端路由的文档 https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#notes-on-client-side-routing too

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署到 github 页面的 create-react-app 链接出现 404 错误 的相关文章

随机推荐

  • C++ 返回字符串不断出现垃圾

    为什么这里的返回字符串上有各种垃圾 string getChunk ifstream in char buffer 5 for int x 0 x lt 5 x buffer x in get cout lt lt x lt lt lt l
  • 未找到符号:__PyCodecInfo_GetIncrementalDecoder

    自从从 Homebrew Python 2 7 11 从 2 7 10 开始 更新后 我突然无法从 PyCharm IDE 控制台在 PyPi 上测试注册我的包 运行 作为 外部工具 python B setup py register r
  • 显示 Pandas 数据框的所有行和列[重复]

    这个问题在这里已经有答案了 我正在 Visual Studio 代码中使用 python 3 和 pandas 包 但 print 函数无法正确显示 例如 当我使用 df head 时 它看起来不错 但是 如果我使用 print 语句 我将
  • 在哪里可以找到被新功能弃用的 Android 功能列表?

    Android 开发者网站中是否有某些内容显示了 API 中的某些附加功能已弃用的内容 例如 一个人如何知道 Fragment 不赞成使用什么内容 Update 新的发行说明可以在此处的新 URL 上以更易于阅读的格式获取 https de
  • 从字符串中删除非 utf8 字符

    我在从字符串中删除非 utf8 字符时遇到问题 这些字符无法正确显示 字符是这样的 0x97 0x61 0x6C 0x6F 十六进制表示 去除它们的最佳方法是什么 正则表达式还是其他什么 如果您申请utf8 encode 对于已经是 UTF
  • 带有计算属性名称的 Typescript setState

    我正在使用 Typescript 2 1 我有一个带有 2 个数字集合的状态的 React 组件 我不想重复 addItem 和 removeItem 方法并希望它们是通用的 这是代码 type Collection challenges
  • 如何将 pyinstaller 与 pipeline/pyenv 一起使用

    我正在尝试从我的 python 脚本中发送一个可执行文件 该脚本位于使用 pipelinev 的虚拟环境中 它再次依赖 pyenv 进行 python 版本控制 为此 我想要使用 pyinstaller 我做了什么 pipenv insta
  • 如何使用 Amazon Marketplace Web Service (Amazon MWS) API 更新产品价格

    只是试图找出更新亚马逊市场商店的产品价格有多容易 或者可能有多困难 经过一番搜索后 我找到了有关的文档 亚马逊商城网络服务 亚马逊MWS https developer amazonservices com gp mws docs html
  • TcpClient 开始连接超时

    如何在 C 中为 BeginConnect 异步调用设置自定义超时 它非常有用 当连接到主 机时有可能不侦听给定端口 每个这样的调用在释放线程之前都会浪费大约 15 秒的时间 我有以下代码 正如许多 stackoverflow 答案中所建议
  • 访问自定义元素的子节点?

    这可能有点令人困惑 我正在尝试从我的自定义元素访问innerHTML 或childNodes 是否可以从Web组件导入文件访问原始DOM结构 在 AttachShadow 之前 在下面的示例中 我尝试从 jookah gallery 导入文
  • 如何在不使用_setmode的情况下在C++中输出unicode

    我正在尝试将 unicode 值 在本例中为 u250F 或 插入到控制台输出 我四处搜寻 人们推荐了各种各样的东西 在我们讨论我的尝试之前 我使用的是 Windows 和 Visual Studio 2013 主要错误 当我尝试多个 修复
  • 常量字符串数组[重复]

    这个问题在这里已经有答案了 可能的重复 声明一个常量数组 https stackoverflow com questions 5142349 declare a const array 我需要类中的常量字符串数组 就像是 public cl
  • PHP版本升级导致类构造函数出现问题

    我刚刚升级了我的 PHP 版本v5 3 1 to v5 3 9 突然 类构造函数开始不起作用 有任何想法吗 您可能正在使用带有类名的构造函数而不是 construct 关键词 请参阅此处 v5 3 3 中的行为更改 http www php
  • 从字符串中查找单词的下一个单词

    我编写了以下代码来从 Java 字符串中获取下一个单词 我觉得它非常原始 我不应该为此编写这么多代码 但找不到任何其他方法 想知道是否有更好的方法可以做到这一点 public static String getNextWord String
  • 如何转义 f:selectItem itemLabel 属性

    如何逃脱f SelectItem itemLabel属性以便我可以在标签中添加超链接 使用以下代码 我能够逃脱h outputText但不是f selectItem
  • 如何计算弹簧圈数?

    在参照 如何检测和计算螺旋的圈数 https stackoverflow com questions 13563880 c sharp wpf emgu how to detect and count a spirals turns 即使在
  • Bootstrap Popover 内容中的外部 HTML 文件

    当我使用 iframe 在弹出窗口内容中加载外部 html 文件时 它限制弹出窗口的高度 但我希望弹出高度是自动的 有人帮帮我吧 document ready function pop right popover title Loading
  • 捕获以毫秒为单位的时间

    下面的代码用于打印日志中的时间 define PRINTTIME struct tm tmptime time t tmpGetTime time tmpGetTime tmptime localtime tmpGetTime cout l
  • PyMongo [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书

    我正在使用 Python 3 9 5 和 PyMongo 3 11 4 我的MongoDB数据库版本是4 4 6 我使用的是 Windows 8 1 我正在学习 MongoDB 并且在 Atlas 中设置了一个集群并连接到该集群 每当我尝试
  • 部署到 github 页面的 create-react-app 链接出现 404 错误

    我正在尝试将 create react app 部署到具有自定义域的 GitHub 页面上的相对路径 例如 www example com myproject 我在用着react router dom react router redux