问题描述
更具体地说,我想在时间条件发生时将特定文件夹(例如 test
)重定向到特定 URL,即当它是那个日期时。
因此,在日期之前可以毫无问题地导航文件夹,而当日期包含在条件中时,用户将被定向到 URL。
我试图使用 RewriteCond %{TIME}
重定向特定文件夹。
但是我无法让它工作。
RewriteEngine On
RewriteCond %{TIME} >=20211212100000
RewriteCond %{TIME} <20221216100000
RewriteCond %{REQUEST_URI} ^/test [NC]
RewriteRule ^$ https://example.com/page$.PHP [R=301,L]
是否可以将 test
文件夹重定向到传递该特定日期的 URL(例如 https://example.com/page.PHP
)?一些建议?
解决方法
我假设这些指令位于根 .htaccess
文件中。
RewriteCond %{TIME} >=20211212100000
RewriteCond %{TIME} <20221216100000
RewriteCond %{REQUEST_URI} ^/test [NC]
RewriteRule ^$ https://example.com/page$.php [R=301,L]
RewriteRule
模式 ^$
仅匹配对文档根目录的请求,因此在请求 /test
时不会处理任何条件。 (您不能请求 example.com/
和 example.com/test
。)
您不需要 RewriteCond
指令 - 应在 RewriteRule
模式 中执行 URL 检查。
但是,您在 substitution 字符串中有一个错误的 $
。
此外,您需要使用 302(临时)重定向,而不是 301(永久)重定向。 301 重定向将被浏览器永久缓存,因此当时间段过去时,浏览器将继续重定向之前重定向的任何用户 - 从缓存中!
请尝试以下操作:
RewriteCond %{TIME} >=20211212100000
RewriteCond %{TIME} <20221216100000
RewriteRule ^test(/|$) https://example.com/page.php [R=302,L]
请注意,RewriteRule
pattern 匹配的 URL 路径不以斜杠开头。正则表达式 ^test(/|$)
避免匹配根目录中仅以 test
开头的其他 URL。
(注意:我认为这些日期/时间仅用于测试?它们是未来的一年,涵盖超过 1 年的时间?!)
如果我将所有内容都放在专用文件夹中,它会起作用,但部分有效。也就是说,如果用户在 /page.php
页面上进行更新,则不会重定向。
在这种情况下应该将它们重定向到哪里?您的条件仅说明当用户请求 /test/<anything>
时,他们将被重定向到 /page.php
(在该时间段内)。如果他们请求 /page.php
那么什么都不会发生。