问题描述
在 previous question 中,我试图解决 WordPress 在可排序的列标题中使用错误的 URL 的问题。在代理后面的管理员中分页,唯一的解决方案涉及修改核心文件,具体来说
在 wp-admin /包含/class-wp-list-table.php 的第 491 和 658 行,替换此行
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
同
if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$hostname = $_SERVER['HTTP_X_FORWARDED_HOST'];
} else {
$hostname = $_SERVER['HTTP_HOST'];
}
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $hostname . $_SERVER['REQUEST_URI'];
任何人都知道如何做到这一点,而不修改核心?
最佳解决方案
我在 Twitter 上提出了这个问题,并要求其他核心开发人员提供反馈。我的本能就是使 $current_url
可以过滤,也可以由可以被覆盖的功能生成。这显然是错误的。
@markoheijnen:
@EricMann Resetting$_SERVER['HTTP_HOST']
sounds like a hackish solution. Same code then can be in wp-config.php@nacin:
@EricMann @markoheijnen Putting it in wp-config is proper. It is not WP’s job to handle reverse proxy situations.@EricMann @markoheijnen Ideally, they should be set properly before WP (or even PHP) is loaded. wp-config is the alternative.
@markoheijnen:
@nacin @ericmann In this case the server/proxy is wrong configured. So I can see why it then should be fixed in wp-config
从这个转换的声音,你有两个选择:
-
重新配置您的代理,以便在事情甚至 PHP /WP 之前设置正确的主机值。
-
手动清理并在
wp-config.php
文件中设置$_SERVER['HTTP_HOST']
。
我想了一下,这里有一些实际的代码可以添加到 wp-config.php
来设置 (基于改变核心文件的 hacky 补丁):
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
这应该设置使得默认的核心文件不需要任何修改才能正常工作。但请注意,我无法测试,因为我没有任何类型的代理设置来验证它… 所以如果这段代码无法解决您的情况,请报告回来,我们可以尝试其他的东西。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。