部署在S3桶的React App仅首页可访问,HashRouter无法解决404问题
React部署AWS S3后非首页404(已用HashRouter仍未解决)的修复方案
修正HashRouter的访问路径逻辑
HashRouter依赖URL中的#片段实现路由,非首页的正确访问路径应为http://你的S3桶域名/#/manager/login这类格式,而非直接输入http://你的S3桶域名/manager/login。如果是页面内跳转,必须使用React Router的<Link>组件,而非普通<a>标签,示例:import { Link } from 'react-router-dom'; // 正确跳转写法 <Link to="/manager/login">管理员登录</Link>该组件会自动在URL中添加
#前缀,确保路由由React接管,而非S3直接查找对应文件。配置S3静态网站托管的错误文档
进入S3桶的静态网站托管设置页,将错误文档设置为index.html。这样无论用户输入的路径是否带#,只要S3找不到对应文件,就会返回首页文件,由React Router解析路由,避免404。验证package.json的homepage配置
当前设置的"homepage": "."是合理的,它保证build后的资源文件使用相对路径引用。可重新执行npm run build,检查build文件夹内index.html的资源引用是否为相对路径(如./static/js/main.xxx.js),确保资源加载正常。清理Route的exact属性(React Router v6)
React Router v6中<Route>默认是精准匹配,exact属性已被移除,保留它虽不报错但易混淆,建议删除:function App() { return ( <div className="App"> <Routes> <Route path="/manager/login" element={<Manager />} /> <Route path="/receptionist/login" element={<Receptionist />} /> <Route path="/" element={<Receptionist />} /> </Routes> </div> ) }
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

