apache 不支持用 mod_rewrite 可靠实现时间段访问限制,必须使用 mod_authz_core 和 mod_authz_host 的 require expr 指令,在授权阶段基于 time_wday、time_hour、time_min 等整数型本地时区变量做布尔判断,并用 包裹 require all denied 和 require expr 规则。

Apache 本身不支持直接用 mod_rewrite 做可靠的时间段访问限制——它只能重写或跳转,不能真正拦截请求,尤其在有 CDN、缓存、HTTPS 终止或代理时容易失效。真正稳定、推荐的方式是使用 mod_authz_core 和 mod_authz_host 提供的 Require expr 指令,在授权阶段执行时间判断。
必须启用的模块
确保以下两行在主配置(如 httpd.conf 或 apache2.conf)中已加载且未被注释:
LoadModule authz_core_module modules/mod_authz_core.soLoadModule authz_host_module modules/mod_authz_host.so
大多数 Apache 2.4+ 发行版默认启用,可用命令验证:apachectl -M | grep authz
时间变量怎么写才准确
Apache 时间变量返回整数,按服务器本地时区解析(不是 UTC,也不是浏览器时区),关键变量有:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
time_wday:星期几,周一为 1,周日为 0 -
time_hour:小时,0–23(无补零,比如 9 点是9,不是09) -
time_min:分钟,0–59(同样无补零)
例如,“工作日 8:30–17:30”要拆成布尔逻辑:time_wday >= 1 && time_wday = 8 && (time_hour
配置到具体路径的正确写法
推荐用 <location></location> 匹配 URL 路径(比 <files></files> 更准,也避免和文件系统路径混淆)。以限制 /admin/ 为例:
<location><requireall>
Require all denied
Require expr "time_wday >= 1 && time_wday = 8 && (time_hour
</requireall></location>
注意两点:
- 必须用
<requireall></requireall>包裹,否则Require all denied会被后续规则覆盖 - 不能省略
Require all denied,否则默认放行
常见失效原因排查
规则写对却没效果?重点检查这几项:
-
.htaccess干扰:若该路径下存在AllowOverride All且含.htaccess,其中的Require all granted会覆盖主配置,临时注释掉测试 - 作用域错位:不要把
<location></location>放在<directory></directory>内部——前者匹配 URL,后者匹配磁盘路径,二者不可嵌套 - 时区不一致:运行
date确认服务器当前时区是否符合预期,必要时用timedatectl set-timezone Asia/Shanghai同步 - 缓存干扰:CDN 或浏览器可能缓存旧响应,测试时加参数(如
?t=123)或用curl -I查看真实状态码










