我正在尝试使用 Apache 中的 RewriteMap 指令来“白名单”(仅允许)某些 IP 范围和特定 IP 的混合。对我来说这很棘手的是,白名单将包含大量 IP,例如 131.132.*(或在 CIDR 表示法中为 131.132.0.0/16)以及同一列表中的特定 IP。我的理解是你不能在 mod_rewrite 中使用 CIDR 表示法,因为 RewriteConds 只是做简单的文本字符串/字符比较(这是正确的吗?)。到目前为止,这是我为我的 RewriteMap 指令提出的,但不确定它是否会起作用。您是否认为以下内容可以将 131.132 中的 IP 范围列入白名单。.(131.132.0.0/16) ... 即开始范围 131.132.0.0 到结束范围 131.132.255.255)和范围 121.122.123.*(即开始范围 121.122.123.0 到结束范围 121.122.123.255)和特定 IP 111.112 .113.114,并且会阻止所有其他 IP?此外,最后三个 RewriteCond 行(注意 RewriteCond 行是“OR'ed”)中的反向引用(%1、%2、%3、%4)是否可以正常引用所有引用的第一个 RewriteCond 行?
RewriteMap ipslist txt:"/path/to/whitelist.txt"
RewriteCond %{REMOTE_ADDR} ^(\d+)\.(\d+)\.(\d+)\.(\d+)$
RewriteCond ${ipslist:%1.%2.%3.%4|block} ^block$ [OR]
RewriteCond ${ipslist:%1.%2.%3.*|block} ^block$ [OR]
RewriteCond ${ipslist:%1.%2.*.*|block} ^block$
RewriteRule (.*) - [F]
####
#### in whitelist.txt file
####
111.112.113.114 allow
121.122.123.* allow
131.132.*.* allow