You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何合并.htaccess中的多组IP封禁规则以简化配置

解决.htaccess合并IP封禁规则的问题

嗨,我懂你碰到的麻烦了——你把多个IP段的封禁规则合并成一组RewriteCond后失效,核心原因是Apache的RewriteCond默认采用**AND(与)**逻辑:只有当所有条件同时成立时,才会执行后续的RewriteRule。显然,一个IP不可能同时匹配三个不同的段,所以你的合并写法根本不会触发封禁。

这里给你两种靠谱的合并方案,任选其一就好:

方案一:用[OR]标记实现“或”逻辑

给每个RewriteCond加上[OR]标记(最后一个条件除外),这样只要匹配任意一个IP段就会触发封禁:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^159\.138 [OR]
RewriteCond %{REMOTE_ADDR} ^114\.119\.1 [OR]
RewriteCond %{REMOTE_ADDR} ^185\.191\.171
RewriteRule .* - [F,L]

⚠️ 注意:最后一个条件别加[OR],否则会引发逻辑错误(相当于“匹配前三个之一 OR 空条件”,会导致所有请求都被封禁)。

方案二:合并成单个正则表达式

把多个IP段用正则的“或”语法(|)合并成一个条件,写法更简洁:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^(159\.138|114\.119\.1|185\.191\.171)
RewriteRule .* - [F,L]

这个正则的意思是:匹配以159.138114.119.1185.191.171开头的IP地址,完美替代原来的多组规则。

额外提示

  • RewriteEngine On只需要写一次,重复声明不会报错,但完全没必要。
  • 你的[F,L]标记用得很对:[F]返回403 Forbidden状态码,[L]表示匹配后停止处理后续规则,避免不必要的资源消耗。
  • 如果之后要加单个IP封禁,直接把IP加到正则括号里就行,比如:^(159\.138|114\.119\.1|185\.191\.171|192\.168\.1\.100)

内容的提问来源于stack exchange,提问作者gnysek

火山引擎 最新活动