问题描述

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

从这个转换的声音,你有两个选择:

  1. 重新配置您的代理,以便在事情甚至 PHP /WP 之前设置正确的主机值。

  2. 手动清理并在 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。