リダイレクトループが止まらない!
- Q.htaccessは問題ないのに、エラーログに大量のリダイレクトループが(汗)
- A
リバースプロキシ使用時はWPのwp-config.phpを修正する必要があります。
リバースプロキシはCDNだけでなくキャッシュの制御にも使われてます。
XServerの場合はXアクセラレーターがNginxを用いたリバースプロキシです。
原因はWPにあった
WordPress公式にこのような説明がありました。
当初は.htaccessを修正してリダイレクトループを解消しようとしましたが、そちらは関係ありませんでした。必要なのはwp-config.phpへの追加設定でした。
WordPressをリバースプロキシ環境(SSLオフロード等)で運用する際のリダイレクトループは、プロキシがhttpsで受けても、バックエンドのWordPressにhttpで転送されるため発生します。解決策は、wp-config.phpにHTTP_X_FORWARDED_PROTOを認識させる設定を追加することです。
WordPress
どこのサーバーも今はリバースプロキシやロードバランサーを使用してるので上記のような追加設定が必要です。でないと.htaccessのリダイレクト設定に問題がなくても、WordPressに処理が移った段階でリダイレクトループが発生します。
具体的な修正方法
wp-config.phpの冒頭に赤字の部分を追加してやればいいようです。<?phpよりも下であれば大丈夫です。自分の場合はすでにあるWP-Cronの設定の下に続けて記述しました。
忘れがちですが、WordPressを複数動かしてる場合、設置したすべてのWPのwp-config.phpを修正しないといけません。一つでも忘れると直らないので御注意下さい。
<?php
/** WP-Cron停止 */
define('DISABLE_WP_CRON', true);
/**
/** リバースプロキシの使用 */
define('FORCE_SSL_ADMIN', true);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}
/**
動作確認にはリダイレクトチェッカーを使うといいです。
設定変更後の結果
修正後、リダイレクトループはエラーログから完全に消えました!(>_<;
今回の方法はWordPress公式が公開しているものですから間違いないです。しかしまさかWordPressの方に原因があるとは思わず、.htaccessの修正ばかり繰り返してました(汗)
リバースプロキシ経由のアクセス(http)をhttpsと誤認するのが原因かと思い、リダイレクト設定にHTTP:X-Forwarded-Protoを追加して、プロトコルでhttp/httpsを判定させようとしましたが、うまくいきませんでした。
今回行った対策ではそれと同じ事をWPの側で行っています。エラーはWPへの転送時に起きるので、そこでX-Forwarded-Protoを用いてプロトコルの判定を行うわけですね。
しかしこんなマニアックな情報、WP使いはどれだけ御存知なんでしょうか…?(汗)
参考
リバースプロキシの使用
https://ja.wordpress.org/support/article/administration-over-ssl/#%e3%83%aa%e3%83%90%e3%83%bc%e3%82%b9%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7%e3%81%ae%e4%bd%bf%e7%94%a8
Webサイトの常時SSL化
https://www.xserver.ne.jp/manual/man_server_fullssl.php
WordPressバージョンアップ後にRedirectの無限ループの解決手順
https://qiita.com/NYC-Blue/items/0f19e7ccc7cf7ad5a187


※コメントは最大500文字、5回まで送信できます