标签: 域名

  • 解析中文域名并配置 Nginx 服务器

    部署中文域名站点,下面讲诉设置中文域名站点——“郝越.我爱你”。

    设置域名解析

    第一步是在设置域名 A 记录,使主机记录中的 @ 和 www 都指向一个 ip。

    域名解析

    上图为万网域名解析后台解析设置

    设置 Nginx server_name

    第二步是修改 nginx/conf/nginx.conf 或者其他 vhost 文件,在 server_name 这一行调整为经过 idn_to_ascii 函数编码的中文域名,而不是原始的中文域名。

    server {
    		listen       80;
    		server_name  xn--vq3al9d.xn--6qq986b3xl;
    		index index.php;
    		root /alidata/www/love;
    }
    

    “郝越.我爱你”经过编码之后是“xn--vq3al9d.xn--6qq986b3xl”。

    在百度搜索“中文域名编码”,进入在线编码的网站,提交中文域名,即可将中文域名转为 punycode 或者是 GBK 编码。在 nginx 配置文件中使用 punycode 即可。

    设置完成之后 reload nginx,即可访问中文域名。

    访问中文域名

    在浏览器地址栏看到的虽然是中文域名,但实际的链接是 http://xn--vq3al9d.xn--6qq986b3xl 。通过 JavaScript document.domain 获取到的域名也是 “xn--vq3al9d.xn--6qq986b3xl”,两者其实是同一个,通过任何一个地址都能访问到服务器。

    扩展:使用 PHP 进行中文域名编码

  • 使用 PHP 进行中文域名编码

    国际化域名。

    比如中文域名,在浏览器地址栏以中文显示,但实际是以 punycode 进行解析和访问。服务器设置 server_name 时不能直接设置中文域名,而是设置中文域名对应的 punycode。

    PHP 提供的 IDN 函数可以把非英文域名转换为 punycode,详见 PHP IDN Functions

    idn_to_ascii 将域名转换为 IDNA ASCII 编码
    idn_to_unicode idn_to_utf8 别名
    idn_to_utf8 将域名 从 ASCII 编码转换为 Unicode 编码

    代码示例

    $xn_idn = idn_to_ascii('郝越.我爱你');
    echo $xn_idn; // xn--vq3al9d.xn--6qq986b3xl
    
    $idn = idn_to_utf8($xn_idn);
    echo $idn; // 郝越.我爱你
    

    使用 IDN 函数之前需要先安装 php5-intl 扩展:

    sudo apt-get install php5-intl