React Router 线上站点部分页面路由失效问题咨询
问题根因
这是单页应用(SPA)静态部署的典型共性问题:
本地执行npm start启动的内置开发服务,默认会对所有路由请求 fallback 到根路径的index.html,所以所有路由均可正常访问;打包后的静态资源部署到线上时,Web 服务器默认会按请求路径匹配对应的实体静态文件,/about、/projects这类前端路由没有对应的实际 HTML 文件,直接访问就会返回404,从404页返回后路由状态异常也和服务端未做正确重定向有关。
修复方案
- Nginx 部署场景:修改站点配置的 location 规则,添加 fallback 配置即可:
location / { try_files $uri $uri/ /index.html; }
- 静态托管平台部署场景(GitHub Pages、Vercel、Netlify等):
- GitHub Pages:在项目
public目录下新建_redirects文件,写入内容/* /index.html 200,打包时该文件会自动同步到产物目录 - 其他托管平台:平台默认已支持SPA路由重定向,若仍失效可在平台后台自定义配置路由规则,将所有请求重定向到根路径
index.html
- GitHub Pages:在项目
- 临时兜底方案:如果暂时无法修改服务端/托管平台配置,可将前端路由模式从 BrowserHistory 改为 HashHistory,路由路径会自动带上
#前缀,所有路由解析都在前端完成、不会发送到服务端,即可规避该问题。
内容的提问来源于stack exchange,提问作者tearisha
相关产品推荐
相关产品推荐

