Files
dns-server/.trae/documents/修复本地规则管理删除规则功能.md
2025-11-28 18:41:55 +08:00

2.0 KiB
Raw Blame History

问题分析

通过代码分析,我发现本地规则管理删除规则功能失效的原因有两个:

  1. 规则格式不匹配

    • 前端显示的规则带有修饰符,例如:||example.com^
    • 服务器端实际存储的是裸域名,例如:example.com
    • RemoveRule 函数在处理规则时,虽然尝试了多种格式变体,但没有正确处理前端发送的带有修饰符的规则
  2. 本地规则标记未更新

    • RemoveRule 函数没有考虑 m.domainRulesIsLocalm.domainExceptionsIsLocal 映射,这些映射用于标记哪些规则是本地规则
    • 删除规则后,没有更新这些映射,导致规则删除不彻底

修复计划

  1. 修改 RemoveRule 函数

    • 改进规则处理逻辑,确保能正确处理带有修饰符的规则
    • 更新 domainRulesIsLocaldomainExceptionsIsLocal 映射,确保本地规则被正确删除
  2. 修改 GetLocalRules 函数

    • 确保返回的规则格式与 RemoveRule 函数期望的格式一致
  3. 添加调试日志

    • 在关键位置添加日志,便于调试和监控规则删除过程

修复步骤

步骤1修改 RemoveRule 函数

shield/manager.go 文件中,修改 RemoveRule 函数,改进规则处理逻辑:

  1. 确保正确处理带有修饰符的规则
  2. 更新 domainRulesIsLocaldomainExceptionsIsLocal 映射
  3. 添加调试日志

步骤2测试修复效果

  • 启动服务器
  • 访问本地规则管理页面
  • 添加一条本地规则
  • 删除该规则
  • 验证规则是否被正确删除,页面内容是否减少

预期效果

修复后,本地规则管理删除规则功能将正常工作:

  • 点击删除按钮后,规则会被正确发送到服务器
  • 服务器会正确处理带有修饰符的规则
  • 本地规则标记会被正确更新
  • 规则会被持久化保存
  • 页面内容会立即减少

这样就能确保本地规则管理删除规则功能正常工作,提供良好的用户体验。