计划维护期间的重写规则

时间:2012-09-17 20:31:13

标签: apache .htaccess mod-rewrite

我对Apache的经验有限,而对RewriteRules的经验则更少。我希望有人可以指出我正确的方向。

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

  1. htaccess文件中的RewriteCond语句与当前时间/日期相比是最佳方式吗?
  2. 是否可以编写规则以防止直接访问页面(即index.htm)?如果是这样,是否也可以为所有子文件夹指定?
  3. 鉴于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
    

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

    谢谢!

    克雷格

1 个答案:

答案 0 :(得分:0)

如果您希望自动执行此操作,则可以专门针对%{TIME_HOUR}%{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]

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

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

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

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

    RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif|ico)$ [NC]