我有一个unicode域名。它被配置为 punycode在server_name
指令中。
当我调用$_SERVER['HTTP_HOST']
我的 PHP 代码时,我得到了相同的 punycode 版本。如何配置 Nginx 以HTTP_HOST
改为设置为 unicode 值?
作为修补程序,我idn_to_utf8($_SERVER['HTTP_HOST'], 0, INTL_IDNA_VARIANT_UTS46)
在脚本顶部调用。但我希望这在我的网站代码之外自动完成。
我发现最接近的是IDN 和 HTTP_HOST但它已有 10 年历史,并且适用于 Apache。
答案1
我认为 nginx 和 PHP 之间使用的 FastCGI 接口不支持不同的字符集。
因此,即使 nginx 能够将域名解码为 UTF-8,也无法将其正确发送给 PHP。
最好的办法是将标题的解码添加HTTP_HOST
到前端控制器中。