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

如何编写按星期、时段匹配的.htaccess RewriteCond重定向规则

.htaccess 按星期、时段自动重定向实现方案

先明确mod_rewrite内置时间变量的取值标准,匹配逻辑基于以下定义:

  • %{TIME_WDAY}:星期标识,取值0-6,对应关系为 0=周日、1=周一、2=周二、3=周三、4=周四、5=周五、6=周六
  • %{TIME_HOUR}:服务器当前时间小时数,24小时制,取值00-23
  • %{TIME_MIN}:服务器当前时间分钟数,取值00-59

注意:TIME_*系列变量读取的是服务器本地时区时间,如果业务面向特定时区用户,请先将服务器时区调整为对应时区,否则时段匹配会出现偏差。规则需写入网站根目录.htaccess,且服务器已开启mod_rewrite模块才可生效。

完整规则代码

将以下代码放在.htaccess文件最顶部即可生效:

RewriteEngine On

# 排除重定向目标页,避免无限重定向循环
RewriteCond %{REQUEST_URI} ^/weekend\.html$ [OR]
RewriteCond %{REQUEST_URI} ^/we-are-closed-come-back-later\.html$
RewriteRule ^ - [L]

# 周六、周日全天重定向至周末提示页
RewriteCond %{TIME_WDAY} ^0$ [OR]
RewriteCond %{TIME_WDAY} ^6$
RewriteRule ^.*$ https://example.com/weekend.html [L,R=301]

# 周一至周五18:00-次日7:00 重定向至站点首页
RewriteCond %{TIME_WDAY} ^[1-5]$
RewriteCond %{TIME_HOUR}%{TIME_MIN} >=1800 [OR]
RewriteCond %{TIME_HOUR}%{TIME_MIN} <0700
RewriteRule ^.*$ https://example.com [L,R=301]

# 周一至周五7:01-17:59 重定向至歇业提示页
RewriteCond %{TIME_WDAY} ^[1-5]$
RewriteRule ^.*$ https://example.com/we-are-closed-come-back-later.html [L,R=301]

逻辑说明

  • 最上方的排除规则:访问请求如果已经是两个提示页本身,直接终止重写流程,不会触发后续跳转,避免死循环
  • 周末规则优先级最高:只要识别到是周六/周日,直接匹配跳转,不再执行工作日时段判断
  • 工作日跨天时段判断:将小时、分钟拼接为4位数字(如18:00为1800、06:59为0659、07:00为0700)做数值比较,比单独判断小时、分钟更简洁,边界时间准确率更高:大于等于1800对应18点及以后,小于0700对应7点整之前,正好覆盖18:00到次日7:00的完整区间
  • 最后一条工作日规则:已经排除了周末、工作日18:00-次日7:00的场景,剩余的工作日时段自然就是7:01-17:59,无需额外写时间判断,减少匹配开销

原有测试规则的问题

  • 仅匹配周日22点非00分的极窄场景,完全没有覆盖需求要求的星期、时段范围
  • 未做重定向循环排除,跳转到目标页后会重复触发规则导致访问报错
  • 规则没有按匹配优先级排序,容易出现逻辑冲突
  • 时段判断逻辑零散,没有做区间化匹配,边界时间很容易判断错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:48:16