Nginx 将 HTTP_HOST 设置为 punycode

Nginx 将 HTTP_HOST 设置为 punycode

我有一个unicode域名。它被配置为 punycodeserver_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到前端控制器中。

相关内容