RewriteMapのバリエーションを試すことができます。そのディレクティブはそこでのみ機能するため、server/vhost 構成へのアクセスが必要になります。その後、htaccess ファイル内でマップを使用できます。
blacklist.txtファイルが次のようになっているとします。
111.222.33.44 deny
55.66.77.88 deny
192.168.0.1 allow
次のようにマップを定義できます。
RewriteEngine On
RewriteMap access txt:/path/to/blacklist.txt
次に、htaccess でマップを呼び出すことができます。
RewriteEngine On
RewriteCond ${access:%{REMOTE_ADDR}} deny [NC]
RewriteRule ^ - [L,F]
条件はマップを呼び出し、リモート アドレスが「deny」という単語にマップされているかどうかを確認します。マップされている場合は、書き換えルールによってアクセスが完全に禁止されます。
blacklist.txtが IPのリストのみで、各 IP の後に「拒否」を追加したくない場合は、プログラム マップ タイプを呼び出して、次のようなスクリプトを記述する必要があります。
#!/bin/bash
while true
do
read INPUT
MATCH=`grep $INPUT /path/to/blacklist.txt`
if [ -z "$MATCH" ]; then
echo "allow"
else
echo "deny"
fi
done
どの無限ループが入力を読み取り、blacklist.txtファイルを grep します。IP がファイルにある場合は「拒否」を出力し、そうでない場合は「許可」を出力します。次に、次のようにマップを作成します。
RewriteEngine On
RewriteMap access prg:/path/to/blacklist.txt
そして、マップに対してチェックする書き換えルールも例外ではありません。