.htaccess 使用htaccess禁止文本文件的IP [已关闭]

62o28rlo  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(143)

**已关闭。**此问题为not about programming or software development。目前不接受答案。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site相关,您可以留下评论,说明在何处可以找到此问题的答案。
6天前关闭。
机构群体在6天前审核了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我阅读并理解了如何使用htaccess阻止IP:

order deny,allow
deny from 111.222.33.44
deny from 55.66.77.88
...
allow from all

但是我的黑IP列表包括了上千个IP。我把所有的IP都保存到了一个blacklist.txt文件中。
我可以使用htaccess调用blacklist.txt并阻止存储在此文件中的所有IP吗?如果可以,如何操作?

elcex8rz

elcex8rz1#

你可以尝试使用RewriteMap的变体。你需要访问server/vhost配置,因为该指令只在那里有效。然后你可以在htaccess文件中使用该Map。
假设您的blacklist.txt文件如下所示:

111.222.33.44  deny
55.66.77.88    deny
192.168.0.1    allow

您可以如下定义Map:

RewriteEngine On
RewriteMap access txt:/path/to/blacklist.txt

然后在htaccess中,可以调用map:

RewriteEngine On 
RewriteCond ${access:%{REMOTE_ADDR}} deny [NC]
RewriteRule ^ - [L,F]

条件调用Map并检查远程地址是否Map到单词“deny”,如果是,重写规则将完全禁止访问。
如果您的blacklist.txt只是一个IP列表,并且您不想在每个IP后添加“deny”,则需要调用一个程序Map类型并编写一个脚本,如下所示:

#!/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

其中无限循环读取输入并grepsblacklist.txt文件。如果IP在文件中,则输出“deny”,否则输出“allow”。然后,您将创建如下Map:

RewriteEngine On
RewriteMap access prg:/path/to/blacklist.txt

检查Map的重写规则也没有什么不同。

相关问题