1.6 KiB
1.6 KiB
问题分析
规则处理存在问题:||domain 规则应该是屏蔽一个绝对域名及其子域名,而不是正则匹配屏蔽,也不应该屏蔽所有包含该顶级域名的网站。
问题根源
在 manager.go 文件中,addDomainRule 函数(第444行)存在逻辑错误:
- 当添加
||example.com规则时,函数正确地将example.com添加到域名规则列表中 - 但随后,函数错误地将域名拆分为各个部分,并为每个部分添加规则
- 例如,对于
||example.com,它会添加example.com、com到规则列表中 - 这导致所有
.com域名都被屏蔽,而不仅仅是example.com及其子域名
修复方案
修改 addDomainRule 函数,移除错误的子域名处理逻辑。因为 CheckDomainBlockDetails 函数已经实现了正确的子域名检查逻辑:它会检查域名的所有子域名部分,从最长到最短,所以不需要在添加规则时就将所有子域名都添加到规则列表中。
修复步骤
- 修改
manager.go文件中的addDomainRule函数 - 移除第457-474行和第487-503行的子域名处理逻辑
- 确保只添加精确的域名到规则列表中
- 保持
CheckDomainBlockDetails函数的子域名检查逻辑不变
预期效果
修复后,||example.com 规则将只屏蔽:
example.comwww.example.comsubdomain.example.com
而不会屏蔽:
anotherexample.comgoogle.com- 其他所有
.com域名
这符合 AdGuard Home 规则的标准行为,即 ||example.com^ 匹配该域名及其所有子域名。