問題描述
在 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。