前回の質問 でプロキシの背後でWordPressが管理者のソート可能な列ヘッダーとページ区切りに間違ったURLを使用していた問題を解決しようとしていました。
Wp-admin/includes/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$_SERVER['HTTP_Host']
のリセットは、ハック的なソリューションのように聞こえます。同じコードがwp-config.phpにあります@nacin :
@ EricMann @markoheijnen wp-configに入れるのが適切です。リバースプロキシの状況を処理するのはWPの仕事ではありません。@EricMann @markoheijnen理想的には、WP(またはPHP)がロードされる前に適切に設定する必要があります。 wp-configは代替です。
@ markoheijnen :
@ nacin @ericmannこの場合、サーバー/プロキシの構成が間違っています。だから、それがwp-configで修正されるべき理由を見ることができます
この会議の音から、2つのオプションがあります。
$_SERVER['HTTP_Host']
ファイルのwp-config.php
を手動でクリーンアップしてセットアップします。もう少し考えましたが、wp-config.php
に追加して実際のコードを追加して、セットアップすることができます(コアファイルを変更するハッキングパッチに基づいて)。
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_Host'] ) ) {
$_SERVER['HTTP_Host'] = $_SERVER['HTTP_X_FORWARDED_Host'];
}
これにより、デフォルトのコアファイルが正しく機能するために変更する必要がないように設定する必要があります。しかし、これを検証するプロキシ設定がないため、これをテストできないことに注意してください...このコードがあなたの状況を修正しない場合、ご報告ください。他の方法をお試しいただけます。
私はこれと同じ問題を抱えていました。プロキシとしてプロキシを使用していて(ProxyPassとProxyPassReverseが定義されています)、仮想ホストに次を追加するだけで解決しました。
仮想ホストに追加します。
ProxyPreserveHost on
Apache httpd v2.4を使用する私は、プライベートなApacheインスタンスの下で/ wp-adminを操作するために以下を使用します。
注:フィルターを通過するには、例を難読化し過ぎる必要がありました。うまくいけば、キーワードはあなたが始めるのに十分なものです。
RequestHeader set Hostあなたのドメインヘッダ編集* Location ^ yourdomain privatedomain
SetOutputFilter Sed OutputSed "s#あなたのドメイン/#/#g"
私のパブリックApacheインスタンスは/ wp-adminへのアクセスを拒否しています。