apache rewritecond 不支持内置时间函数,但可通过 time_* 环境变量(如 time_hour、time_wday)配合数值比较实现时间条件重写,变量值为字符串但支持 >=、
Apache 的
RewriteCond本身不直接支持时间匹配,它没有内置的时间函数(比如now()、hour()等)。但可以通过间接方式实现基于时间的条件重写,常见且可靠的做法是:
- 利用 Apache 内置的环境变量
TIME_HOUR、TIME_MIN、TIME_DAY、TIME_MONTH、TIME_YEAR等- 这些变量由 Apache 自动设置,格式为字符串(如
TIME_HOUR是09或23),可配合正则表达式或字符串比较使用
✅ 正确写法:用
TIME_*环境变量做条件判断# 示例:只在工作日(周一到周五)上午 9 点到 17 点之间生效 RewriteCond %{TIME_WDAY} [1-5] RewriteCond %{TIME_HOUR} >=09 RewriteCond %{TIME_HOUR} <blockquote><p>注意:<code>TIME_WDAY</code> 是星期几,<code>0</code>=周日,<code>1</code>=周一 … <code>6</code>=周六<br><code>TIME_HOUR</code> 是 24 小时制两位字符串(<code>00</code>–<code>23</code>),支持 <code>>=</code>、<code>、<code>=</code>、<code>、<code>></code> 数值比较</code></code></p></blockquote><hr><h3>⚠️ 常见陷阱和注意事项</h3>
TIME_*变量是服务器本地时间(由ServerRoot所在系统时区决定),不是 UTC,也不是客户端时区- 比较运算符仅支持数值比较(
>=、等),但变量值是字符串;Apache 会自动尝试转为整数比较 —— 所以 <code>09和9都能正确比对- 不要写成
%{TIME_HOUR} ^0[9-1][0-9]$这类正则(易出错),优先用>=/更清晰安全TIME_MIN、TIME_SEC同样可用,但精度越高越难调试,一般小时级足够
? 实用时间条件组合示例
夜间维护时段(23:00 – 05:00)跳转维护页
Apache 2.4.62下载PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
RewriteCond %{TIME_HOUR} >=23 [OR] RewriteCond %{TIME_HOUR}仅在每月 1 号执行重定向
RewriteCond %{TIME_DAY} =01 RewriteRule ^/special$ /january-offer.html [R=302,L]避开周末(周六、周日)
RewriteCond %{TIME_WDAY} !=0 RewriteCond %{TIME_WDAY} !=6 RewriteRule ^/promo$ /workday-only.html [R=302,L]
❌ 不推荐的方式
- 试图用外部脚本(如 PHP/Python)动态生成规则:不可靠、性能差、无法在
.htaccess中生效- 依赖
mod_rewrite的time模块:Apache 官方从未提供名为time的 rewrite 函数或标志- 使用
%{TIME}或%{DATE_TIME}:这些变量不存在,会导致条件恒假或语法错误不复杂但容易忽略细节。关键是记住:Apache 时间条件只靠
TIME_*系列环境变量 + 数值比较。
相关文章
Apache 中 DirectoryIndex 指令指定的文件不存在时怎么返回自定义 404
Apache DocumentRoot 配合反向代理缓存怎么配
Apache DocumentRoot 配合容器卷挂载怎么配
Apache 怎么使用 Include 配置实现高频更新配置的无缝平滑重载
Apache 运行组怎么配
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn












