我需要一个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_WDAY
为0
星期日至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.html
和we-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.html
和weekend.html
),否则,当发出请求时,无论如何,这些都可以直接访问(如上所述)。例如:
# 0. Ignore static resources
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(weekend.html|we-are-closed-come-back-later.html)?$ - [L]
重写(内部)而不是重定向(外部)
或者,您可以在内部重写URL,而不是重定向。然后,您只有一个公共URL(即。文件根目录)和底层文件(即。weekend.html
或we-are-closed-come-back-later.html
)可以对用户隐藏。