Apache可通过mod_rewrite模块结合系统时间自动在非工作时间显示维护页,无需重启服务或外部脚本;配置需启用rewrite模块、允许.htaccess、设置基于%{TIME_HOUR}和%{TIME_WDAY}的重写规则,并排除/maintenance.html自身。

Apache 中静态网站在非工作时间显示维护公告,核心思路是利用 mod_rewrite 模块结合系统时间判断,动态重写请求到维护页面。不需要重启服务,也不依赖外部脚本,纯配置即可实现。
启用 rewrite 模块并允许 .htaccess
确保 Apache 已加载重写模块,并允许目录级配置生效:
- 检查
httpd.conf中是否启用了:LoadModule rewrite_module modules/mod_rewrite.so - 找到对应网站目录的
<Directory>区块,将AllowOverride None改为:AllowOverride All - 重启或重载 Apache:
systemctl reload httpd
编写基于时间的重写规则
在网站根目录下新建 .htaccess 文件,写入以下规则(以周一至周五 9:00–18:00 为工作时间为例):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteEngine On
# 获取当前小时和星期(0=周日,1=周一...6=周六)
RewriteCond %{TIME_HOUR} ^0[0-8]$ [OR]
RewriteCond %{TIME_HOUR} ^1[9-9]$ [OR]
RewriteCond %{TIME_HOUR} ^2[0-3]$ [OR]
RewriteCond %{TIME_WDAY} ^0$ [OR]
RewriteCond %{TIME_WDAY} ^6$
# 排除维护页自身,避免循环
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
# 所有其他请求重定向到维护页(内部重写,URL 不变)
RewriteRule ^(.*)$ /maintenance.html [L]说明:
• %{TIME_HOUR} 是两位数字格式(如 09、14),需用正则匹配;
• %{TIME_WDAY} 周日为 0,周六为 6;
• [L] 表示最后一条规则,避免后续规则干扰。
准备维护页面文件
在网站根目录放置一个简单的 maintenance.html,内容可包含:
- 清晰标题如“系统维护中”
- 说明时间段(例:“每日 18:00 至次日 09:00 及周末进行例行维护”)
- 建议添加基础 CSS,确保在无样式情况下仍可读
- 避免引用外部 JS/CSS,防止加载失败导致空白
验证与调试技巧
测试时可临时修改条件快速验证效果:
- 把
RewriteCond %{TIME_HOUR} ^0[0-8]$改成^0[0-9]$测试凌晨逻辑 - 开启 Apache 重写日志(仅开发环境):
RewriteLogLevel 3和RewriteLog "/var/log/httpd/rewrite_log"(Apache 2.2)
或使用LogLevel alert rewrite:trace3(Apache 2.4+) - 注意服务器时间必须准确,建议配置 NTP 同步

















