這些年在使用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的時間段。
评论