您可以尝试使用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]
条件调用映射并检查远程地址是否映射到单词“拒绝”,如果是,则重写规则彻底禁止访问。
如果您的 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
哪些无限循环读取输入并 greps blacklist.txt 文件。如果IP在文件中,则输出“拒绝”,否则输出“允许”。然后你会像这样创建地图:
RewriteEngine On
RewriteMap access prg:/path/to/blacklist.txt
检查地图的重写规则也不例外。