htaccess用于根据时间和日期重定向到站点



我需要一个rewritecsecond为htaccess重定向到基于时间和日期的网站。

,

如果是星期一、星期二、星期三、星期四或星期五在18:00至7:00之间RedirectMatch 301 ^/.*$ https://example.com

如果星期一,星期二,星期三,星期四或星期五在7:01至17:59之间RedirectMatch 301 ^/.*$ https://example.com/we-are-closed-come-back-later.html

如果是星期六或星期日RedirectMatch 301 ^/.*$ https://example.com/weekend.html

I tried something like this:
RewriteCond %{TIME_HOUR} ^22$
RewriteCond %{TIME_MIN} !^00$
RewriteCond %{TIME_WDAY} =0
RewriteRule !^night  https://example.com [L,R]
but need it more specific as written.
any idea?

试试下面的方法:

RewriteEngine On
# 1. Mon-Fri between 07:01 and 17:59 - CLOSED
RewriteCond %{TIME_WDAY} [12345]
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1800
RewriteRule !^we-are-closed-come-back-later.html$ /we-are-closed-come-back-later.html [R,L]
# 2. Sat-Sun - WEEKEND
RewriteCond %{TIME_WDAY} [06]
RewriteRule !^weekend.html$ /weekend.html [R,L]
# 3. Mon-Fri between 18:00 and 07:00 (OPEN)
RewriteCond %{TIME_WDAY} [12345]
RewriteCond %{TIME_HOUR}%{TIME_MIN} >=1800
RewriteCond %{TIME_HOUR}%{TIME_MIN} <=0700
RewriteRule !^$ / [R,L]

TIME_WDAY0星期日至6星期六之间的星期几。

>0700是按字典顺序进行的字符串比较(而不是数字比较)。因此,如果HHMM为0701或更大,则为真。

在每个规则中,我们需要检查我们是而不是已经在要重定向到的文件/URL上(例如。!^weekend.html$),否则,它会自然地触发一个重定向循环。

您不一定需要最后一个规则(当它是"OPEN"时)的任何条件(检查日期/时间),因为如果前面的规则不匹配(即;CLOSED或WEEKEND),则必须是打开的。

例如:

# 3. Otherwise redirect to homepage (OPEN)
RewriteRule !^(weekend.html|we-are-closed-come-back-later.html)?$ / [R,L]

然而,这意味着当商店实际上是"打开"时,可以直接访问weekend.htmlwe-are-closed-come-back-later.html(通过输入URL)。

静态资源/资产(图片,JS, CSS,…)

然而,上面没有考虑到你可能在本地链接的任何静态资源。如果没有额外的规则,上面的代码也会将这些静态资源重定向到指定的url/文件。/weekend.html等。

理想情况下,任何静态资产都将被分组在/assets子目录中,然后您可以简单地在现有规则之前为该子目录创建一个例外。例如:

# 0. Ignore static resources
RewriteRule ^assets/ - [L]

或者,对任何映射到物理文件的请求都设置一个异常。然而,我们需要排除上面使用(即2文件。we-are-closed-come-back-later.htmlweekend.html),否则,当发出请求时,无论如何,这些都可以直接访问(如上所述)。例如:

# 0. Ignore static resources
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(weekend.html|we-are-closed-come-back-later.html)?$ - [L]

重写(内部)而不是重定向(外部)

或者,您可以在内部重写URL,而不是重定向。然后,您只有一个公共URL(即。文件根目录)和底层文件(即。weekend.htmlwe-are-closed-come-back-later.html)可以对用户隐藏。

最新更新