Apache托管SPA需启用前端控制器模式:通过.htaccess配置mod_rewrite,将所有非真实文件请求重写至index.html,同时禁用目录索引、脚本执行及敏感文件访问,并为HTML设no-cache、静态资源设长缓存及安全响应头。

Apache 托管静态单页应用(SPA)本身是安全的,但默认配置不满足 SPA 路由需求,容易导致 404 错误或暴露敏感路径。关键在于正确启用前端控制器模式、限制非必要服务、并防止缓存污染或目录遍历风险。
启用前端控制器模式(.htaccess 重写)
SPA 的所有路由都应由客户端 JavaScript 处理,服务器不能对 /about、/dashboard 等路径返回 404。需确保 Apache 启用 mod_rewrite,并在项目根目录放置 .htaccess:
- 确认 Apache 配置中 AllowOverride All 已启用(尤其在
块中),否则 .htaccess 不生效 - 内容示例(适用于 Vue/React/SvelteKit history 模式):
RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] - 避免使用 FallbackResource(虽简洁但可能绕过 RewriteCond 判断,不利于调试)
禁用危险功能与路径泄露
静态托管场景下,多数 Apache 功能不仅无用,反而引入攻击面:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 关闭目录索引:在 .htaccess 或虚拟主机中添加 Options -Indexes,防止用户访问 /assets/ 时列出全部文件
- 禁止执行脚本:添加 SetHandler default-handler 和 Options -ExecCGI -Includes,杜绝 .php/.pl/.shtml 文件被意外解析
- 限制敏感文件访问:用 <Files ".env"> Require all denied </Files> 类规则屏蔽配置文件、源码映射(*.map)、git 目录等
合理设置缓存与安全头
静态资源可强缓存,但 HTML 入口页必须禁止缓存,否则用户可能加载旧版 index.html 导致 JS/CSS 版本错配:
- 对 index.html 设置:Header set Cache-Control "no-cache, no-store, must-revalidate"
- 对 assets/ 下的 JS/CSS/图片等,建议用版本化路径(如 app.a1b2c3.js)并设:Cache-Control: public, max-age=31536000, immutable
- 添加基础安全头:Header always set X-Content-Type-Options "nosniff"、Header always set X-Frame-Options "DENY"、Header always set Referrer-Policy "no-referrer-when-downgrade"
验证部署完整性
上线前务必检查三项实际行为,而非仅看配置文件:
- 直接访问一个内部路由(如 https://yoursite.com/settings),确认返回 200 + index.html 内容,且浏览器地址栏未跳转
- 尝试访问 https://yoursite.com/.git/config,确认返回 403 或 404,而非文件内容
- 用 curl -I https://yoursite.com/index.html 查看响应头,验证 Cache-Control 是否符合预期,且无 Server、X-Powered-By 等冗余信息泄露

















