使用 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 的状态(日期、时间等)?任何帮助将不胜感激!
【问题讨论】:
不要忘记这一天本身,使用<=
或>=
。否则,您将离线一天。
我仍然收到下面提到的错误。每当我向规则添加 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]
也不要忘记使用>=
或<=
,这取决于您是想在当天还是之后开启。
【讨论】:
经过几次测试,现在可以正常工作了。非常感谢!然而,相关的,我尝试了一些特定的时间来测试它是否正确更改,并且 >= 导致错误。如果我只是让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 将替代内容设置到特定日期 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 apache 2.4 RewriteRule 中使用发布数据规则编写替换和重定向 url(两者同时)?
强制 SSL 重定向 - Apache/IHS RewriteCond 和 RewriteRule
使用 Apache RewriteRule 和 RewriteCond 将替代内容设置到特定日期 [关闭]