reactjs - GitHub Page 主页子域抛出 404
问题描述
我将一个 React 应用程序部署到 Github Page 作为主页。
问题是我无法直接访问 /home 或任何子域,也无法刷新其上的页面。它会抛出 404。但是,如果您等待着陆页上的动画完成,则可以在应用程序内部进行重定向,您可以进入 /home。
我查了一下,没有我的其他存储库在 /home 下注册。
有人能告诉我为什么吗?我应该如何解决这个问题?
更新:反应,路由器配置:
import React, { Component } from 'react';
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Preloader from './components/Preloader';
import Home from './components/Home';
import './App.scss';
class App extends Component {
render() {
return (
<Router>
<React.Fragment>
<Switch>
<Route path="/" exact component={Preloader} />
<Route path="/home" component={Home} />
</Switch>
</React.Fragment>
</Router>
);
}
}
export default App;
解决方案
解决方案 1
正如这篇文章
Deploying A Create React App with Routing to Github Pages中所展示的,
您应该使用 aHashRouter
来避免在刷新页面时在 GitHub 页面上出现 404 错误。
哈希路由器
路由器使用 URL 的散列部分(即 window.location.hash)使您的 UI 与 URL 保持同步。
重要提示:哈希历史不支持 location.key 或 location.state。在以前的版本中,我们试图对这种行为进行填充,但存在我们无法解决的极端情况。任何需要这种行为的代码或插件都不起作用。由于此技术仅旨在支持旧版浏览器,因此我们鼓励您配置您的服务器以使用它。
尝试使用以下命令更新您的导入语句:
import { HashRouter as Router, Switch, Route } from "react-router-dom";
解决方案 2
更好的解决方案可能是配置您的服务器以正确处理路由。查看本指南,了解如何为此使用 express:
const express = require('express')
const path = require('path')
const port = process.env.PORT || 8080
const app = express()
// serve static assets normally
app.use(express.static(__dirname + '/public'))
// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (request, response){
response.sendFile(path.resolve(__dirname, 'public', 'index.html'))
})
app.listen(port)
console.log("server started on port " + port)
推荐阅读
- flask - SqlAlchemy 中一对多关系的混合属性
- php - 在 AWS Apache 服务器上,is_dir 在现有目录上返回 false
- c# - 如何通过代码清除 Blazor webapp 的缓存内存
- javascript - 即使在html,css,js中更改父级的宽度大小,如何防止坐标折叠
- database - 在运行时在数据库上下文之间切换(ASP.NET Core、依赖注入)
- python - 抑制 matplotlib 中的科学记数法 offsetText
- c# - C# 中 DDD 枚举的 swagger 文档和 swag 客户端代码
- python - 如何通过函数传递矩阵?
- sanity - Sanity.io CMS – 编写模式类型
- android - Flutter 地点选择器应用程序在运行时崩溃(Android)