You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Heroku上配置单页Create-React-App实现URL重写至index.html

解决Heroku上Create React App的URL重写问题(适配react-router)

嘿,我碰到过一模一样的问题!用Create React App搭配官方buildpack部署到Heroku时,要实现像Firebase Hosting那样的URL重写(让react-router不管直接访问子路由还是从首页导航都正常工作),确实得靠static.json来配置,但你的配置里有几个小细节没做好,导致没生效,我来帮你一步步搞定:

1. 修正static.json配置

你的配置里有明显的路径映射错误(比如/legal/*指向了/images/),而且缺少了关键的root字段(告诉buildpack构建产物的目录)。正确的配置应该是这样:

{
  "root": "build/",
  "routes": {
    "/images/*": "/images/",
    "/legal/*": "/legal/",
    "/media/*": "/media/",
    "/fav/*": "/fav/",
    "/styles/*": "/styles/",
    "/**": "index.html"
  }
}
  • root: 指定静态文件的根目录,Create React App构建后的产物都在build/文件夹里,这个字段必须加,否则buildpack找不到你的静态资源。
  • 路由映射:每个静态资源目录(比如/images/、/legal/)要正确映射到自身,确保静态文件能被正常访问。
  • "/**": "index.html": 这是核心规则——捕获所有不匹配静态资源的请求,重写到index.html,让react-router在客户端接管路由逻辑,和Firebase的重写规则效果完全一致。

2. 确认Heroku使用正确的Buildpack

要确保你的Heroku应用用的是mars/create-react-app这个专门的buildpack,而不是默认的Node.js buildpack:

  • 先检查当前buildpack:
heroku buildpacks
  • 如果不是目标buildpack,设置它:
heroku buildpacks:set mars/create-react-app

3. 重新部署应用

修改完static.json后,提交代码并推送到Heroku:

git add static.json
git commit -m "Fix static.json for react-router routing"
git push heroku main

4. 验证效果

部署完成后,直接访问一个react-router定义的子路由(比如https://your-app.herokuapp.com/about),如果能正常加载页面而不是返回404,就说明配置生效了!

这个配置的原理和Firebase Hosting的重写规则一样:让服务器把所有非静态资源的请求都转发到index.html,这样react-router就能在客户端处理路由切换,不管用户是直接访问子路由还是从首页导航过来都能正常工作。

内容的提问来源于stack exchange,提问作者Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:51:11