リダイレクトループを止める方法

リダイレクトループが止まらない!

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使いはどれだけ御存知なんでしょうか…?(汗)

参考

送信中です

×

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

送信中です送信しました!