中文域名与 IDN:好用还是坑
中文域名听起来很美,但实际用起来有不少坑。先搞清楚它怎么工作,再决定要不要买。
一、底层是 punycode
DNS 系统只认 ASCII。中文域名会被编码成 xn-- 开头的 punycode:
白泽.net → xn--hjqp4w.net
# 用命令转换
# Python
python3 -c "print('白泽.net'.encode('idna').decode())"
# xn--hjqp4w.net浏览器地址栏显示中文,实际请求用的是 punycode。
dig +short xn--hjqp4w.net A二、兼容性问题
| 场景 | 支持情况 |
|---|---|
| 现代浏览器 | ✅ 地址栏显示中文,自动转换 |
| 邮件地址 | ⚠️ 部分邮件系统不支持 |
| 命令行工具 | ⚠️ 需要手动转 punycode |
| 部分 App 内 WebView | ⚠️ 可能显示错乱 |
| 证书签发 | ✅ 支持,但要用 punycode 申请 |
| 老系统 | ❌ |
# Let's Encrypt 申请中文域名证书
sudo certbot --nginx -d xn--hjqp4w.net三、最大的问题:同形异义字钓鱼
不同字符的 Unicode 可能长得一模一样:
拉丁字母 a vs 西里尔字母 а → 肉眼无法区分
拉丁字母 o vs 西里尔字母 о
中文「白」 vs 日文汉字「白」(字形略有差异)攻击者可以注册一个看起来完全一样的域名做钓鱼。所以浏览器有防护规则:
- 如果域名混用了多种语言的字符,浏览器会直接显示 punycode(
xn--...)而不是原文; - 纯中文(或纯某种非拉丁文字)的域名才显示原文。
白泽.net → 显示「白泽.net」(纯中文,安全)
аpple.com → 显示 xn--pple-43d.com(混用了西里尔字母,警告)四、实际使用中的问题
1. 输入法切换很烦
用户要访问你的站点,得先切中文输入法打出「白泽」,再切英文输入 .net。这个体验很差。
2. 口头传播困难
"我的域名是 baize dot net" → 清楚
"我的域名是白泽点net" → 哪个白?哪个泽?3. 部分场景不支持
- 一些表单验证会拒绝非 ASCII 域名;
- 部分 CDN、监控服务对 IDN 支持不完整;
- 日志文件里是 punycode,排查时不好认。
4. 价格通常更贵
中文域名续费价往往高于普通 .com。
五、什么时候值得注册
| 场景 | 建议 |
|---|---|
| 主域名 | ❌ 不推荐用纯中文 |
| 品牌保护 | ⚠️ 可考虑,防止别人注册 |
| 面向不熟悉英文的用户 | ⚠️ 可作为跳转域名 |
| 营销活动短链 | ⚠️ 有意义,但要配合跳转 |
比较务实的用法:注册中文域名,301 跳转到你的主域名。
server {
listen 443 ssl;
server_name xn--hjqp4w.net;
ssl_certificate /etc/letsencrypt/live/xn--hjqp4w.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xn--hjqp4w.net/privkey.pem;
return 301 https://www.bzii.cn$request_uri;
}这样中文域名成为一个「入口」,实际站点还是英文域名(兼容性最好)。
六、如果要用,注意这些
# 1. 确认注册商支持 IDN
# 大部分支持,但管理界面可能显示 punycode
# 2. 证书要用 punycode 申请
sudo certbot certonly --nginx -d xn--hjqp4w.net
# 3. 配置文件里写 punycode
server_name xn--hjqp4w.net; # 不要写中文
# 4. DNS 记录填 punycode
dig +short xn--hjqp4w.net A
# 5. 邮箱也要考虑:中文邮箱兼容性更差七、emoji 域名
技术上可行(也是 punycode),比如 xn--e28h.com(😀.com)。
python3 -c "print('😀.com'.encode('idna').decode())"
# xn--e28h.com但兼容性更差,且很多注册商不允许。当成玩物就好,别用在正式场景。
八、检查与调试
# 中文转 punycode
python3 -c "print('白泽.net'.encode('idna').decode())"
# punycode 转回中文
python3 -c "print('xn--hjqp4w.net'.encode().decode('idna'))"
# 用 idn 命令(需装 idn2)
idn2 白泽.net
# 查解析
dig +short xn--hjqp4w.net A九、我的结论
主域名:用英文/拼音 → www.bzii.cn
品牌保护:可注册中文域名 → 白泽.net → 301 跳转
不要:把中文域名当主入口理由很实际:
- 输入成本高(切输入法);
- 兼容性不确定(各种 App、邮件、老系统);
- 口头传播困难;
- 跳转方案能拿到中文域名的好处(好记、本土化),又避开它的坑。
中文域名不是「不好」,而是成本收益不划算。用 301 跳转的方式,是它最合理的用法。
