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

React Router v6.15.0仅渲染首页,刷新其他路由出现404求助

解决React Router刷新子路由404问题

问题根源

用createBrowserRouter时采用的是HTML5 History模式,前端跳转路由属于客户端行为,但刷新页面时浏览器会直接向服务器请求对应路径的资源——服务器上根本没有/app-configs这类静态文件,自然返回404。只有首页/是服务器默认返回的入口文件(比如index.html),所以刷新首页没问题。要解决这个问题,得让服务器把所有路由请求都重定向到入口文件,交给React Router处理路由匹配。

分场景解决

1. 本地开发环境

如果用Vite

在vite.config.js中开启History模式支持:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    historyApiFallback: true,
  },
});

如果用Create React App

构建完成后不要直接打开build文件夹,用serve工具启动并指定重定向规则:

# 先全局安装serve
npm install -g serve
# 启动时加-s参数,将所有请求导向index.html
serve -s build

2. AWS Amplify部署

方法一:配置amplify.yml

在项目根目录创建或修改amplify.yml,添加重写规则:

version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm install
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: build
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
  rewriteRules:
    - source: /<*>/
      target: /index.html
      status: 200

方法二:Amplify控制台配置

登录Amplify控制台找到你的项目,进入Rewrites and redirects页面,添加一条规则:

  • Source address: </^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>
  • Target address: /index.html
  • Type: 选择200 (Rewrite)

代码确认

你的路由配置本身没问题,注意Layout组件里必须包含<Outlet />,否则子路由内容无法渲染:

// Layout组件示例
import { Outlet } from 'react-router-dom';

export default function Layout() {
  return (
    <div>
      {/* 这里放置导航栏等公共内容 */}
      <Outlet /> {/* 子路由的页面会渲染在这个位置 */}
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:37:07