Ответ 1
Вы можете попробовать использовать варианты 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-адресов, и вы не хотите добавлять "deny" после каждого из них, вам нужно будет вызвать тип карты программы и написать a script, что-то вроде этого:
#!/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
И правило перезаписи для проверки на карте не будет отличаться.