update
This commit is contained in:
37
dns/.trae/documents/plan_20251215_073614.md
Normal file
37
dns/.trae/documents/plan_20251215_073614.md
Normal file
@@ -0,0 +1,37 @@
|
||||
## 问题分析
|
||||
|
||||
规则处理存在问题:`||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^` 匹配该域名及其所有子域名。
|
||||
Reference in New Issue
Block a user