这些年在使用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的时间段。
评论