web-dev-qa-db-ja.com

Wordpress wp-signup.phpへのマルチサイトリダイレクト

最近、私のWordpressマルチサイトに2つ目のブログを開設しました。マルチサイトの主要なブログはwww.example.comで、2日前に設定した2番目のブログはwww.example2.orgです。

残念ながら、www.example2.orgに行くと、WordPressはhttps://www.example.com/wp-signup.php?new=にリダイレクトします

同じサーバー上で、対応するテストマルチサイトをセットアップしました。test.example.comがプライマリブログで、test.example2.orgが2番目のブログです。問題なく動作しています。

マルチサイト関連の.htaccesswp-config.phpの設定は、テストとライブマルチサイトの両方で同じであるため、問題はありません。また、ライブのマルチサイトでwww.example2.orgwp_blogsテーブルに正しく設定されていること、およびhttps://www.example2.orgテーブルのsiteurlおよびhome行(MultisiteのブログIDに対応するwp_2_options部分)に_2_として正しく設定されていることも確認しました)。

このリダイレクトが発生する理由や解決方法についての提案をいただければ幸いです。どのファイルがリダイレクトを発行しているかさえ知らないので(wp-signup.phpとは思わない)、さらにデバッグするために関連するコードを見ることができません。

4

何時間ものデバッグと絶望の後、問題は解決しました。それはとてもあいまいなことであることがわかりました。

リダイレクトは/wp-includes/ms-load.php内の関数ms_load_current_site_and_network()によって発行されます。 /wp-includes/ms-settings.phpがドメインを設定できなかったため、リダイレクトを発行していました。ドメインを設定できなかったのは、$_SERVER['HTTP_Host']が設定されていないためです。

設定されていない$_SERVER['HTTP_Host']は、PHP設定 auto_globals_jit と関係がありました。 Onに設定されているため、$_SERVER配列は設定されません( このコメント で説明されているように)。 $_SERVER['HTTP_Host']とそれ以外はphpinfo();を含む単一のphpファイルをロードするときに定義されていましたが、Wordpressのphpファイルをロードするときには定義されませんでした。そしてそれはリダイレクトにつながりました。

Php.iniでauto_globals_jitをOffに設定することで解決しました。

ボーナス情報:

この問題は、何らかの形のキャッシングによってさらに複雑になりました(これを突き止めたり、明確にしたりすることはできませんでした)。それで、私は私が見た行動に一度だけ頼らなければなりませんでした、そして、その後複製することができませんでした。たとえば、$_SERVER['HTTP_Host']が設定されているかどうかを確認するためだけのphpファイルを別に作成しましたが、最初はそうではありませんでした。 コメント からの提案に従って、私はphpファイルで$_SERVER['HTTP_Host']を2回使用しました - そしてすぐにそれが設定されたことをすぐに見ました。しかし、変更を元に戻して$_SERVER['HTTP_Host']をphpファイルに一度だけ入れても、それはまだ設定されたままです - 私はキャッシュされた応答を見ていたことを示唆しています。一度修正しただけでは、再度中断することはありません。

誰かが似たような行動に遭遇した場合に備えて、ここでこれを文書化するだけです。

2