最近、私の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番目のブログです。問題なく動作しています。
マルチサイト関連の.htaccess
とwp-config.php
の設定は、テストとライブマルチサイトの両方で同じであるため、問題はありません。また、ライブのマルチサイトでwww.example2.org
がwp_blogs
テーブルに正しく設定されていること、およびhttps://www.example2.org
テーブルのsiteurl
およびhome
行(MultisiteのブログIDに対応するwp_2_options
部分)に_2_
として正しく設定されていることも確認しました)。
このリダイレクトが発生する理由や解決方法についての提案をいただければ幸いです。どのファイルがリダイレクトを発行しているかさえ知らないので(wp-signup.php
とは思わない)、さらにデバッグするために関連するコードを見ることができません。
何時間ものデバッグと絶望の後、問題は解決しました。それはとてもあいまいなことであることがわかりました。
リダイレクトは/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ファイルに一度だけ入れても、それはまだ設定されたままです - 私はキャッシュされた応答を見ていたことを示唆しています。一度修正しただけでは、再度中断することはありません。
誰かが似たような行動に遭遇した場合に備えて、ここでこれを文書化するだけです。