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

在Apache部署的Moodle应用中嵌入Vite构建的React应用出现空白页及资源404问题求助

在Apache部署的Moodle应用中嵌入Vite构建的React应用出现空白页及资源404问题求助

看起来你遇到的核心问题是Vite生成的资源路径错误,再加上Apache配置里的规则冲突,才导致了空白页和404报错。我帮你拆解一下问题,分开发模式和生产模式两种场景给出针对性的解决方案:

一、先修正Vite的基础路径配置

不管是开发还是生产,Vite都需要明确自己的部署根路径是/react/,这是解决资源路径错误的核心。修改你的vite.config.js:

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

export default defineConfig({
  plugins: [react()],
  base: '/react/', // 新增:指定React应用的部署基础路径
  build: {
    outDir: 'build',
  },
  server: {
    port: 3000,
    host: true,
    origin: 'https://moodleapp/react' // 开发模式下,让Vite生成的资源链接指向正确的域名+路径
  }
});

另外,Vite并不依赖package.json里的homepage字段,你可以把它删掉,避免混淆。

二、调整Apache配置:解决规则冲突

你当前的Apache配置同时对/react设置了Alias和ProxyPass,这两个规则会冲突(ProxyPass优先级更高),所以需要根据使用场景二选一:

场景1:生产模式(部署打包后的静态文件)

如果你已经执行了yarn build,要部署build目录的静态文件,那么删除ProxyPass相关配置,只保留静态资源的Alias规则:

<VirtualHost ipserver:443>
ServerAdmin moodleapp@domain.com
ServerName moodleapp
DocumentRoot /var/www/moodleapp
ErrorLog ${APACHE_LOG_DIR}/upficerror.log
CustomLog ${APACHE_LOG_DIR}/upficaccess.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/aula/moodleapp.crt
SSLCACertificateFile /etc/ssl/certs/aula/moodleapp.ca
SSLCertificateKeyFile /etc/ssl/certs/aula/moodleapp.key

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>

<Directory /var/www/moodleapp/>
Options -Indexes
Order allow,deny
Allow from all
</Directory>

# React生产构建的配置
Alias /react /var/www/moodleapp/react/build
<Directory /var/www/moodleapp/react/build>
Options -Indexes
Order allow,deny
Allow from all
DirectoryIndex index.html
FallbackResource /react/index.html # 支持React路由的SPA刷新
</Directory>

# 以下配置请删除(生产模式不需要暴露src目录,也不需要代理到开发服务器)
# <Location /react>
# ProxyPass http://localhost:3000
# ProxyPassReverse http://localhost:3000
# </Location>
# <Directory /var/www/moodleapp/react/src>
# Options -Indexes
# Order allow,deny
# Allow from all
# </Directory>
# Alias /react/src /var/www/moodleapp/react/src
</VirtualHost>

然后把.htaccess移动到/var/www/moodleapp/react/build目录下(生产模式只需要部署build目录),并修改内容:

RewriteEngine On
RewriteBase /react/ # 改为/react/,匹配部署路径
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /react/index.html [L]

最后执行yarn build,重启Apache,清空浏览器缓存后访问https://moodleapp/react即可。

场景2:开发模式(使用Vite热更新)

如果是开发阶段需要实时调试,那么保留ProxyPass配置,删除Alias规则,让请求转发到Vite开发服务器:

<VirtualHost ipserver:443>
# 其他配置保持不变...

# 删除以下静态资源配置
# Alias /react /var/www/moodleapp/react/build
# <Directory /var/www/moodleapp/react/build>
# ...
# </Directory>

# 只保留代理规则,注意目标路径要加上/react
<Location /react>
ProxyPass http://localhost:3000/react
ProxyPassReverse http://localhost:3000/react
</Location>
</VirtualHost>

启动Vite开发服务器(yarn start),重启Apache后,访问https://moodleapp/react就能正常加载,并且支持热更新功能。

三、额外注意事项

  • 生产模式下绝对不要暴露src目录,避免代码泄露和安全风险。
  • 如果你的React应用使用了路由(比如React Router),生产模式下的FallbackResource配置必须正确,确保刷新页面时不会出现404。
  • 每次修改配置后,记得重启Apache并清空浏览器缓存,避免旧缓存导致的问题。

备注:内容来源于stack exchange,提问作者Ander Canales Medina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:24:35