部署到域名子文件夹后React Router无法正常工作的问题
解决方案:配置React Router的basename属性
你的问题出在React Router没有配置部署的基础路径(basename)。Vite的--base参数仅用于处理静态资源的加载路径,但React Router的浏览器路由需要明确知道应用部署在子目录下,才能正确匹配路由。
具体修改步骤:
在创建createBrowserRouter时,添加basename选项,值为你的部署子目录/field-logger/。
修改后的路由配置代码:
const router = createBrowserRouter( [ { path: "/", element: <BaseLayout />, errorElement: <ErrorPage />, children: [ { path: "/", element: <LogbooksPage />, }, { path: "/logbook/:logbookId", element: <LogbookPage />, }, { path: "settings", element: <SettingsPage />, }, { path: "dx-cluster", element: <DXClusterPage />, } ] } ], { basename: "/field-logger/" // 新增这一行 } );
额外说明:
- Vite的
build --base=/field-logger/配置是正确的,不需要在package.json中设置homepage字段——这个是Create React App的专属配置,Vite不识别它。 - 部署后如果遇到页面刷新404的问题,还需要配置服务器的SPA fallback规则(比如Nginx设置
try_files $uri $uri/ /field-logger/index.html;),但你当前的路由匹配错误优先通过添加basename解决。
内容的提问来源于stack exchange,提问作者André Luiz
相关产品推荐
相关产品推荐

