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

如何配置Vite将带public文件夹的React应用部署到域名子目录?

Vite React部署子目录时Public资源404问题解决

问题背景

我将基于Vite的React应用部署到域名子目录https://example.com/my-app,当前使用的vite.config.ts配置如下:

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

export default defineConfig({
  plugins: [react()],
  root: "./",
  build: {
    outDir: "dist",
  },
  base: "/my-app/",
  publicDir: "public"
});

部署后访问https://example.com/my-app能正常加载初始JS和CSS文件,但运行时public文件夹内的资源请求会直接指向根域名(例如https://example.com/my-asset),导致404错误。需要让这些资源请求也自动指向配置的子目录。

解决方法

1. 修正代码中public资源的引用方式

问题核心在于直接使用绝对路径引用public资源,未结合Vite的base配置。必须通过import.meta.env.BASE_URL拼接资源路径:

  • 错误写法:
    <img src="/my-asset.png" />
    
  • 正确写法:
    <img src={`${import.meta.env.BASE_URL}my-asset.png`} />
    

import.meta.env.BASE_URL会自动读取vite.config.ts中配置的base值,打包后路径会自动生成为/my-app/my-asset.png,确保请求指向子目录。

2. 确认vite.config.ts配置有效性

你当前的配置已经设置了base: "/my-app/",这部分是正确的,额外注意:

  • publicDir保持"public"即可,Vite会自动处理该目录下资源的打包路径
  • build.outDir设置为dist符合默认规范,无需修改

3. 服务器配置匹配(以Nginx为例)

确保服务器将子目录请求正确映射到dist文件夹:

location /my-app {
  alias /path/to/your/dist;
  try_files $uri $uri/ /my-app/index.html;
}

这样服务器会把/my-app开头的请求转发到dist目录下的对应资源,同时支持React路由的刷新跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:28:16