You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP从.htaccess中提取指定deny from IP条目

问题根因

你的现有代码存在两个逻辑漏洞:

  • $ip变量没有在每次循环前重置,遇到不含IP的行(比如deny from all)时,会沿用上次循环的$ip值,甚至首次循环未匹配到IP时$ip为空,导致匹配到无IP的deny from 内容输出
  • 分两次匹配的逻辑冗余,容易出现变量作用域的问题

修正后代码

$htaccess = $_SERVER["DOCUMENT_ROOT"]."/.htaccess";
$contents = file_get_contents($htaccess);
$lines = explode("\n", $contents);
foreach ($lines as $line) {
    // 单次正则直接匹配符合要求的 deny IP 规则
    if (preg_match('/^deny from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/', trim($line), $matches)) {
        echo $matches[0] . "<br>";
    }
}

规则说明

新的匹配规则直接过滤无效内容:

  • ^ 匹配行开头,排除行内嵌套的无关内容
  • 固定匹配deny from 前缀,自动过滤所有allow from开头的规则
  • 紧跟IPv4地址匹配规则,直接排除后缀为all的情况
  • $ 匹配行结尾,避免行尾多余字符干扰匹配
  • 增加trim()处理行首尾的空格、换行符,兼容.htaccess的不规则缩进格式

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:54:03