You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess中如何对比当前时间与DEADLINE环境变量实现重定向

Apache mod_rewrite 直接引用环境变量做时间对比实现方案

核心注意事项

原生Apache Rewrite规则完全支持直接读取环境变量做对比,不需要硬编码时间,但是要避开两个常见问题:

  • SetEnv指令属于mod_env模块,执行时机晚于mod_rewrite的重写阶段,重写规则运行时还读不到这个变量,必须换用更早执行的变量赋值方式
  • 两边对比的时间字符串格式必须完全对齐,因为RewriteCond的字符串对比是字典序匹配,你当前用的日/月/年_小时h分钟格式是高位时间在前、固定长度的结构,字典序对比结果和实际时间先后逻辑完全一致,不需要额外转时间戳

可用配置

第一种写法(兼容PHP读取变量最方便):

RewriteEngine On

# 用SetEnvIf提前注入环境变量,重写阶段可读取,PHP端可通过$_SERVER['DEADLINE']直接获取值
SetEnvIf Request_URI "^.*$" DEADLINE=16/06/2022_19h30

# 拼接当前时间字符串,和环境变量存储的截止时间做对比
RewriteCond %{TIME_DAY}/%{TIME_MON}/%{TIME_YEAR}_%{TIME_HOUR}h%{TIME_MIN} >=%{ENV:DEADLINE}
RewriteRule ^index.php$ read_only/index.html [L]

第二种写法(不需要依赖mod_setenvif模块,纯mod_rewrite实现):

RewriteEngine On

# 重写流程开头先赋值环境变量,PHP端同样可读取
RewriteRule .* - [E=DEADLINE:16/06/2022_19h30]

RewriteCond %{TIME_DAY}/%{TIME_MON}/%{TIME_YEAR}_%{TIME_HOUR}h%{TIME_MIN} >=%{ENV:DEADLINE}
RewriteRule ^index.php$ read_only/index.html [L]

格式校验要求

配置截止时间时必须保证每个时间段都是两位数字:

  • 月份、日期小于10时前面补0,比如6月要写06不能写6
  • 小时、分钟小于10时前面补0,比如9点5分要写09h05不能写9h5
    否则字符串长度不一致会导致字典序对比结果错误。

内容的提问来源于stack exchange,提问作者Etlok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:42:14