2012年10月31日水曜日

and条件を使ったhtaccessでのアクセス制限(ユーザーエージェントとIPアドレス)

  • このエントリーをはてなブックマークに追加

一般的にhtaccessでアクセス制限を行うときは下記の2種類に別れる。
・ユーザーエージェントで携帯を弾きたい
・特定のIPアドレスからのアクセスを弾きたい

だけどまぁ時代的に今はスマフォでPCサイトを見れたりもするわけで。
元上司のブログにいやなコメントを残していくスマフォユーザーがいたらしい。
なのでユーザーエージェントだけで弾くのはまずいし、
もちろんIPアドレスで弾くのもまずい。
だけど「かつ」条件を使ったやり方がわからないとのことだったので、書いてみた。

#弾きたい機種の場合、deny_uaとして変数を作成
SetEnvIf User-Agent "機種名" deny_ua

#正規表現を用いてIPアドレスを判別し、指定のIPならばdenyに
SetEnvIf Remote_Addr ".*" addr=allow
SetEnvIf Remote_Addr "^(xxx\.xxx\.xxx\.xxx)$" addr=deny

#もしIPアドレスが指定外のものだったら、deny_uaを削除
SetEnvIf addr allow !deny_ua

#env=deny_uaの場合のみ弾く
order allow,deny
allow from all
deny from env=deny_ua
これで「ある機種」かつ「あるIP」の場合に弾く事が可能になった。
意外とhtaccessでのかつ条件って使わないと言えば使わないけど、
普通のプログラミングみたいにandとか&&があるわけではないから微妙に悩んだ。
けど考え方としては、この条件でないならば設定した変数を消すってことで問題なし。

Adsense