当前位置

基于时间的Apache ReWrite规则

James Qi 在 2015年5月18日 - 17:53 提交
内容摘要:这些年在使用MediaWiki和Drupal过程中难免要用到Apache的重写规则,最基本的是用于网址简洁化,去掉那些index.php?title=之内的东西,后来也用于跳转手机版判断、屏蔽采集者、......

  这些年在使用MediaWiki和Drupal过程中难免要用到Apache的重写规则,最基本的是用于网址简洁化,去掉那些index.php?title=之内的东西,后来也用于跳转手机版判断、屏蔽采集者、纠正引导报错网址等,可以说是一个非常有力的工具,基本上是没法离开。

  但在做一些临时性、测试性修改的时候,偶尔会忘记改还原而导致出现问题,例如因为服务器负载过高而临时屏蔽某个搜索引擎的User-Agent,后来忘记还原了导致搜索引擎爬虫无法抓取、收录量急剧下降等,如果能在临时设置的时候就限定时间就好,以前这样想过,但一直没有找办法。

  今天在网上搜索了一下,找到了办法,.htaccess中代码如下:

RewriteCond %{HTTP_HOST} ^jamesqi\.com$ [NC]
RewriteCond %{REQUEST_URI} ^\/test$
RewriteCond %{TIME_YEAR} =2015
RewriteCond %{TIME_MON} =05
RewriteCond %{TIME_DAY} =18
RewriteCond %{TIME_HOUR} =17
RewriteCond %{TIME_MIN} >30
RewriteCond %{TIME_MIN} <38
RewriteRule .* - [F]

  上面这样设置后,http://jamesqi.com/test 这个页面在 2015-05-18 17:30 到 2015-05-18 17:38之间就会拒绝访问,其它时间恢复为可以正常访问。

  除了上面这些变量外,还有3个可用:TIME_SEC(秒), TIME_WDAY(星期), TIME(完整时间)。还可以把变量合并一起用,例如:

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} <=20150519
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700

  2016年1月补充一个应用的例子:

RewriteCond %{REQUEST_URI} ^(.*)sitemap(.*)$
RewriteCond %{TIME_HOUR} <19
RewriteCond %{TIME_HOUR} >7
RewriteRule .* - [F,L]

  有的时候服务器带宽被占满,用iftop -i eth1 查看是百度爬虫抓取大量sitemap导致的,以上设置可以限制抓取sitemap的时间段。

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符