2

我在 Apache 方面的经验有限,在 RewriteRules 方面的经验更少。我希望有人能指出我正确的方向。

每天早上 5:00 到 5:30 之间,我们的服务器上都会执行一些计划任务。在此期间,我们希望将 Web 请求重新路由到“维护中”页面。我认为使用 htaccess 页面很有意义,因为它允许我将请求指向通用页面,而无需维护大量设置更改。我的问题有两个部分:

  1. 与当前时间/日期相比,htaccess 文件中的 RewriteCond 语句是最好的方法吗?
  2. 是否可以编写规则以防止直接访问页面(即 index.htm)?如果是这样,是否也可以为所有子文件夹指定它?

鉴于 RewriteCond TIME 变量显示为“yyyymmddhhnnss”,我假设它看起来像这样:

RewriteCond %{TIME} ^(([0-9]{8})[0][5][0-2][0-9][0-5][0-9])
RewriteRule .* http://mysite.com/under_maintenance.htm

这有意义吗?我感谢您提供的任何和所有帮助。

谢谢!

克雷格

4

1 回答 1

0

如果您希望这自动发生,您可以专门针对%{TIME_HOUR}and %{TIME_MIN}vars 进行匹配:

# hour = 05
RewriteCond %{TIME_HOUR} 05

# minute between 00 and 31
RewriteCond %{TIME_MIN} >00 [OR]
RewriteCond %{TIME_MIN} 00
RewriteCond %{TIME_MIN} <31

# can add other exceptions here

# make sure the request isn't FOR the maintenance page    
# redirect to maintenance
RewriteRule !^/?under_maintenance.htm$ http://mysite.com/under_maintenance.htm [L,R]

http://mysite.com/under_maintenance.htm对于除维护页面之外的每个请求,此 302(临时)重定向到。所以答案是:

  1. 是的,您可以使用 aRewriteCond来比较时间,这是一种无需执行任何额外操作即可自动执行此操作的好方法。
  2. 此规则将阻止访问除维护页面之外的所有内容。您可以通过在 之前添加其他条件来改变这一点RewriteRule,例如,如果您想允许/special_page.htm,那么您将添加:

    RewriteCond %{REQUEST_URI} !^/special_page.htm$
    

    如果您想允许所有 iamges 和 css,那么您将添加:

    RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif|ico)$ [NC]
    
于 2012-09-17T21:00:27.667 回答