Apache可通过ErrorDocument或重写规则实现维护页:先禁用真实首页,再用403+ErrorDocument或503+RewriteRule统一返回maintenance.html,要求该页独立、无外链、响应式且含明确标题与时间。

Apache 本身不支持用 DirectoryIndex 直接触发错误页面,但它能和 ErrorDocument 协同工作,在特定条件下实现“维护公告”的优雅呈现——关键是让所有请求都导向一个静态维护页,同时保持 HTTP 状态码合理、路径不暴露、内容无外部依赖。
核心思路:用 DirectoryIndex 做兜底,靠 ErrorDocument 拦截异常
维护页不是靠“访问不存在的首页”来触发的,而是主动让所有路径(包括 /、/api、/static/js/app.js)都返回同一份 HTML。这需要两层配合:
-
第一层:禁用真实服务入口 —— 把原站点的
index.php或index.html临时重命名或移走,确保DirectoryIndex查不到可用首页 -
第二层:强制 fallback 到维护页 —— 配置
ErrorDocument 403 /maintenance.html,再把维护页放在 DocumentRoot 下,并确保它本身不被索引规则跳过
具体配置步骤
假设你的网站根目录是 /var/www/example.com,维护页文件为 maintenance.html:
- 把
maintenance.html放到 DocumentRoot 下:/var/www/example.com/maintenance.html - 编辑虚拟主机配置(如
/etc/apache2/sites-enabled/000-default.conf),在<VirtualHost>内添加:
Options -Indexes +FollowSymLinks
DirectoryIndex disabled_index.html
ErrorDocument 403 /maintenance.html
Require all denied
</Directory>
这样,任何对目录的请求都会因 Require all denied 返回 403,再由 ErrorDocument 指向维护页,状态码仍是 403,但用户看到的是你定制的内容。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
更推荐的方案:用重写规则替代错误页
上面方法虽可行,但 403 状态码语义上是“禁止访问”,不如 503(Service Unavailable)准确。更稳妥的做法是绕过 DirectoryIndex 和 ErrorDocument,直接用重写拦截全部流量:
- 启用 mod_rewrite:
a2enmod rewrite(Debian/Ubuntu)或确认LoadModule rewrite_module modules/mod_rewrite.so已开启 - 在
<VirtualHost>中添加:
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteRule ^(.*)$ /maintenance.html [R=503,L]
注意:[R=503] 会返回标准的维护状态码,浏览器和爬虫都能正确识别;RewriteCond 排除维护页自身,避免死循环。
维护页文件必须满足的硬性要求
无论用哪种方式,maintenance.html 本身要独立可靠:
-
标题明确:
<title>网站维护中</title>,别留空或写成“首页” -
无外部资源:CSS 写在
<style>里,图片用 base64 或绝对 URL(如https://cdn.example.com/img/logo.png),禁用相对路径引用 -
响应式布局:加
<meta name="viewport" content="width=device-width">,文字居中、字号适配移动端 -
关键信息清晰:例如
<h2>系统升级中</h2><p>预计恢复时间:2026年7月22日 10:00</p>

















