Files
dns-server/.trae/documents/plan_20251215_073614.md
2025-12-19 12:44:57 +08:00

37 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 问题分析
规则处理存在问题:`||domain` 规则应该是屏蔽一个绝对域名及其子域名,而不是正则匹配屏蔽,也不应该屏蔽所有包含该顶级域名的网站。
## 问题根源
`manager.go` 文件中,`addDomainRule` 函数第444行存在逻辑错误
1. 当添加 `||example.com` 规则时,函数正确地将 `example.com` 添加到域名规则列表中
2. 但随后,函数错误地将域名拆分为各个部分,并为每个部分添加规则
3. 例如,对于 `||example.com`,它会添加 `example.com``com` 到规则列表中
4. 这导致所有 `.com` 域名都被屏蔽,而不仅仅是 `example.com` 及其子域名
## 修复方案
修改 `addDomainRule` 函数,移除错误的子域名处理逻辑。因为 `CheckDomainBlockDetails` 函数已经实现了正确的子域名检查逻辑:它会检查域名的所有子域名部分,从最长到最短,所以不需要在添加规则时就将所有子域名都添加到规则列表中。
## 修复步骤
1. 修改 `manager.go` 文件中的 `addDomainRule` 函数
2. 移除第457-474行和第487-503行的子域名处理逻辑
3. 确保只添加精确的域名到规则列表中
4. 保持 `CheckDomainBlockDetails` 函数的子域名检查逻辑不变
## 预期效果
修复后,`||example.com` 规则将只屏蔽:
- `example.com`
- `www.example.com`
- `subdomain.example.com`
而不会屏蔽:
- `anotherexample.com`
- `google.com`
- 其他所有 `.com` 域名
这符合 AdGuard Home 规则的标准行为,即 `||example.com^` 匹配该域名及其所有子域名。