跳到主要内容

去重复域名实战:批量域名去重为什么要忽略大小写和 www 前缀

把多份导出里的域名整理成一份干净白名单时,Example.com、example.com 和 www.example.com 其实是同一个站。这篇讲清归一化思路,给一个真实去重例子,全程浏览器本地处理。

发布于 作者 李雷
#域名去重 #域名规范化 #白名单整理 #本地工具

去重复域名:批量域名去重为什么要忽略大小写和 www 前缀

整理一份域名白名单的时候,你大概率会遇到这种情况:同一个站点,在不同的导出文件里写法不一样。一处是 Example.com,一处是 example.com,还有一处带着 www.example.com。肉眼一看是三行,但它们指向的是同一个网站。如果只做一次简单的字符串去重,这三行会全部留下,白名单里就多出了两条冗余记录。

要把这类列表整理干净,关键不在"去重"本身,而在去重之前的归一化。

为什么三种写法是同一个站

域名在 DNS 层面对大小写不敏感。EXAMPLE.COMexample.com 解析到的是完全相同的记录,浏览器、解析器、证书校验都把它们当作一个名字。所以 Example.comexample.com 不应该算两个域名。

www 前缀则是另一回事。它是一个约定俗成的子域名,绝大多数站点会把 www.example.com 指向裸域 example.com(或者反过来)。在白名单、访问统计、配置文件这类场景里,你关心的是"哪个站点",不是"带不带 www"。把 www. 折叠掉,统计口径才不会被同一个站拆成两份。

结尾的那个点也是同样的道理。example.com. 末尾的点是 DNS 的完全限定写法,从 zone 文件或某些工具里复制出来时经常带着,但它和 example.com 是一回事。

去重前先做的三步归一化

要让上面这些写法收敛成一个,正确的顺序是先归一化、再去重:

  1. 统一转小写:把 Example.com 折成 example.com,大小写差异先消除。
  2. 去掉 www 前缀:把 www.example.com 折成 example.com,子域名约定先对齐。
  3. 去掉结尾的点:把 example.com. 折成 example.com,完全限定写法先抹平。

三步做完,所有指向同一站点的写法就有了同一把"钥匙"。这时候再做去重,重复项才会真正合并,而不是因为一个大写字母或一个 www 就被当成两条。顺序很重要:如果先去重再归一化,前面那一步等于白做。

一个真实的去重例子

假设你手上合并了两份白名单导出,粘进来的原始内容是这样:

Example.com
example.com
www.example.com
EXAMPLE.com.
api.example.com
www.API.example.com

按上面的归一化规则跑一遍,大小写、www、结尾点都对齐之后,去重结果是:

example.com
api.example.com

前四行全部收敛成 example.com,计数显示重复 4 次;后两行收敛成 api.example.com,重复 2 次。注意 api.example.com 不会被并进 example.com,因为 api 是一个真实的子域名,不属于 www 这类被折叠的前缀。归一化只动该动的部分,不会把不同的子域名误判成同一个。

每一行还会带上首次出现的行号,方便你回到原始文件核对,而不是拿到一份干净列表却不知道它从哪几行来。

输出成白名单和统计口径

去重之后,这份列表才适合往下交接。你可以只保留唯一值导出成 CSV,直接喂给防火墙白名单、CDN 配置或访问统计脚本;也可以把无效项一并带出来复核,比如那些缺顶级域、含非法字符、或还留着 http:// 前缀的行,它们会带着原因留在输出里,方便你应用前再清洗一遍。

需要写进代码时,逐行、JSON、SQL IN、TypeScript union 这几种格式可以直接切换,省掉手工补引号和漏逗号的麻烦。

我自己的整理习惯

我每次合并多份导出,都会先在 域名去重工具 里跑一遍归一化去重,再决定下一步。有一回我把三个团队各自维护的白名单拼在一起,原始有 800 多行,跑完只剩 210 个真实站点,中间近四分之三是大小写和 www 造成的重复。如果当时直接拿原始列表去配置,白名单的命中统计会严重失真,排查起来更费劲。

整个过程在浏览器本地完成,粘进去的域名不会上传到任何服务器。白名单这类东西本身就敏感,本地处理这一点我看得很重。

如果你的列表里混着完整 URL 而不只是裸域名,可以先用 URL 提取工具 把域名部分抓出来,再回到去重这一步,顺序对了,结果才干净。


Made by Toolora · Updated 2026-06-13