我在 Azure 网站上创建了一个新的 wordpress 站点,这次使用的是 IDN 域。我使用其 punycode 表示在管理员页面中配置了域:
Wordpress 网址: http: //xn--sandraeiaki-8db.com 网站网址:http: //xn--sandraeiaki-8db.com
一切正常,除了从管理中的 wopress 设置页面保存设置。成功保存设置后,wordpress 尝试重定向回设置页面,但不知何故,重定向会更改域,而不是重定向回http://xn--sandraeiaki-8db.com它重定向到http://xn--sandraeiaki -bra36d.com/
我得到的唯一线索是, http: //xn--sandraeiaki-bra36d.com/是 http://sandraeiã±aki.com/ 的 punycode 表示,所以似乎 wordpress 在这里使用了无效编码而不是UTF-8 用于重定向回设置页面。
更新
在成功保存更改后,我可以在 wordpress options.php 文件中看到它尝试使用重定向:
/**
* Redirect back to the settings page that was submitted
*/
$goback = add_query_arg( 'settings-updated', 'true', wp_get_referer() );
wp_redirect( $goback );
exit;
更新 2 在与soulseekah聊天后,我们发现问题出在 Azure 上 IIS 设置的位置值中,创建了一个简单的 php 页面,更改了位置标头,重定向失败:
<?php header( 'Location: /' ); exit; ?>
检查 location 标头值,显示它是用 ASCII 而不是 UTF-8 编码的:
地点:sandraeiñaki.com
更新 3
经过一些测试,只有当 header() php 函数传递一个相对位置 url 值时才会发生,将位置值设置为绝对 uri 可以通过使用 punycode 域编码或 utf-8 编码来解决没有问题。
我通过更改 wordpress 重定向功能进行了临时修复,现在它只设置绝对 uris,并且似乎正在工作。
但是,我如何才能永久修复这种行为?