DocumentRoot 指向 dist 绝对路径以提供静态文件,但必须配合 mod_rewrite 重写规则——当请求非真实文件或目录时 fallback 至 /index.html,由前端路由接管,否则刷新页面返回 404。
Apache 部署静态 (比如 Vue、React 打包后的前端项目)时,DocumentRoot 的作用是告诉 Apache:用户访问这个站点时,该从哪个目录里找 HTML、JS、CSS 等文件。但只设好 DocumentRoot 不够——前端路由(如 /user/settings)没有真实对应文件,必须配合重写规则,否则刷新页面就 404。
打包工具(如 npm run build)生成的静态资源默认在 dist/ 目录下。Apache 不接受相对路径,所以配置中要写完整路径:
DocumentRoot /var/www/my-app/dist(Ubuntu/Debian)DocumentRoot /srv/www/my-app/dist(RHEL/CentOS)仅声明 DocumentRoot 不会自动赋予访问权限。必须用 <Directory> 明确允许访问,并启用重写支持:
DocumentRoot 完全一致:<Directory "/var/www/my-app/dist">
Require all granted(放开访问)、AllowOverride All(允许 .htaccess 生效)<Directory> 块内单页应用所有非资源请求(如 /about、/admin)都应返回 index.html,由前端 JS 路由接管。这靠重写实现:
sudo a2enmod rewrite(Debian系)或确认 LoadModule rewrite_module modules/mod_rewrite.so 已加载(RHEL系)<Directory> 内添加标准 fallback 规则:RewriteEngine On
RewriteBase /
RewriteRule ^index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
含义是:只要请求的不是真实文件(!-f)也不是真实目录(!-d),就统一重写到 /index.html。
改完配置后必须检查语法并重载服务,否则修改不生效:
sudo apachectl configtest 或 sudo httpd -t
sudo systemctl reload apache2(Debian)或 sudo systemctl reload httpd(RHEL)/dashboard)并刷新,确认不报 404