Можете да опитате да използвате варианти на RewriteMap. Ще ви трябва достъп до конфигурацията на сървъра/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 адреси и не искате да добавяте „отказ“ след всеки от тях, ще трябва да извикате тип програмна карта и да напишете скрипт, нещо като това:
#!/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
които безкрайни цикли четат входа и greps на файла blacklist.txt. Ако IP е във файла, изведете "deny", в противен случай извежда "allow". След това ще създадете картата така:
RewriteEngine On
RewriteMap access prg:/path/to/blacklist.txt
И правилото за пренаписване за проверка спрямо картата не би било по-различно.
person
Jon Lin
schedule
22.10.2012