使用 Apache RewriteRule 和 RewriteCond 将替代内容设置到特定日期 [关闭]

Posted

技术标签:

【中文标题】使用 Apache RewriteRule 和 RewriteCond 将替代内容设置到特定日期 [关闭]【英文标题】:Set alternate content until a specific date with Apache RewriteRule and RewriteCond [closed] 【发布时间】:2013-04-17 09:56:00 【问题描述】:

我需要在特定日期之前为一个正在建设的页面提供服务,但我将在需要显示新内容的那一天离开这个国家,并且在一周半之后(我知道,第一世界的问题。 ..)

我目前在我的 httpd-vhosts.conf 文件中提供 under_construction 页面。

RewriteRule ^(.*)$ \
http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/under_construction/VirtualHostRoot$1 [L,P]

下面是我想使用的,但我不完全理解它应该如何工作,当然它不能正常工作,因为它没有正确配置。我已经尝试更改时间字符串以使其在重新启动后几分钟更改,但配置可能一开始就不正确。

RewriteRule ^(.*)$ \
RewriteCond ^TIME < 201304220000
http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/under_construction/VirtualHostRoot$1 [L,P]

RewriteRule ^(.*)$ \
RewriteCond ^TIME > 201304220000
http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/content/VirtualHostRoot$1 [L,P]

我至少在正确的轨道上吗?此外,除了 localhost:80/server-status 之外,还有什么方法可以从终端查看 Apache 的状态(日期、时间等)?任何帮助将不胜感激!

【问题讨论】:

不要忘记这一天本身,使用&lt;=&gt;=。否则,您将离线一天。 我仍然收到下面提到的错误。每当我向规则添加 RewriteCond 时,浏览器都无法连接到服务器。无论是否存在第二条规则,都会发生这种情况。 【参考方案1】:

比较运算符和CondPattern之间不允许有空格

RewriteCond %TIME <20130422000000
RewriteRule ^(.*)$ \
http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/under_construction/VirtualHostRoot$1 [L,P]

RewriteCond %TIME >=20130422000000
RewriteRule ^(.*)$ \
http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/content/VirtualHostRoot$1 [L,P]

也不要忘记使用&gt;=&lt;=,这取决于您是想在当天还是之后开启。

【讨论】:

经过几次测试,现在可以正常工作了。非常感谢!然而,相关的,我尝试了一些特定的时间来测试它是否正确更改,并且 >= 导致错误。如果我只是让under_construction时间20130422000000,它似乎会在那个时间发生变化而不会跳过。我尝试使用 20130417124000,并在 12:40 刷新内容后完美切换。再次感谢!【参考方案2】:

您需要RewriteCond 它适用的规则之前:

RewriteCond %TIME < 20130422000000
RewriteRule ^(.*)$ http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/under_construction/VirtualHostRoot$1 [L,P]

RewriteCond %TIME > 20130422000000
RewriteRule ^(.*)$ http://localhost:8080/VirtualHostBase/\
http/%SERVER_NAME:80/content/VirtualHostRoot$1 [L,P]

%TIME 变量是 4 位年份、2 位月份、2 位日期、2 位小时、2 位分钟和 2 位秒。

【讨论】:

出于某种原因,每当我将 RewriteCond %TIME > 20130422000000 添加到 https-vhosts.conf 文件时,我都会收到“Safari 无法连接到服务器”的错误消息。如果我删除 RewriteCond,它会恢复正常。我已经尝试更改日期/时间,仍然没有。 对不起,httpd-vhosts.conf

以上是关于使用 Apache RewriteRule 和 RewriteCond 将替代内容设置到特定日期 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

403重定向不起作用

如何在 apache 2.4 RewriteRule 中使用发布数据规则编写替换和重定向 url(两者同时)?

强制 SSL 重定向 - Apache/IHS RewriteCond 和 RewriteRule

使用 Apache RewriteRule 和 RewriteCond 将替代内容设置到特定日期 [关闭]

Apache HTTPD RewriteRule 中的 ^ 和 $ 是啥意思?

Apache 配置 http 转 https