サポート » 使い方全般 » httpsへリダイレクトをしたいのですがリダイレクトループがかかる不具合

  • httpにアクセスがあった場合httpsにリダイレクトをかけたいのですがどうもループになってしまいます。
    htaccessに

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    # END WordPress

    をいれてますがどういう不具合か原因がわかりますでしょうか。
    サーバー環境はサクラです。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • さくらレンタルサーバーの共有SSLを利用されてるのでしたらproxyのせいで
    その症状になるそうです。
    環境変数HTTP_X_SAKURA_FORWARDED_FORを使うことで解決できるとのこと。

    トピック投稿者 yamapy

    (@yamapy)

    gatolaboさま

    ありがとうございます。

    サクラで取得した独自ドメインでやっております。
    SSLは外部のラピッドsslを使っています。

    これでも環境変数を使うのでしょうか。
    ちなみにあまりシステムやプログラミングには強くなく・・・
    ネットで検索したものをコピーして使うぐらいの知識しかありません・・・

    ご指導お願いいたします。

    トピック投稿者 yamapy

    (@yamapy)

    追記で

    環境ですが

    ・サーバー サクラ
    ・独自ドメイン
    ・ラピッドsslを導入
    ・wp-config.phpで

    define(‘WP_SITEURL’, ‘https://hoge.com&#8217;);
    define(‘WP_HOME’, ‘https://hoge.com&#8217;);

    の設定をしています。
    ・functions.phpで

    function is_ssl() {
    return true;
    }

    の設定をして強制的にssl常態化しています。

    さくらインターネットの「SSL利用時の注意点」のページには以下のように書いてあります。
    –引用開始–
    環境変数の取扱い
    「さくらのレンタルサーバ」にて提供しているウェブサーバApacheは、 80番ポートを使用する(HTTP)ものと、 443番ポートを使用する(HTTPS)ものとの 2種類に分けられます。 また、後者についてはプロクシとして動作します。 一般的に、前者は「http://」、後者は「https://」という形式でアクセスしますが、 同じディレクトリへのアクセスであっても、その際に呼び出されるウェブサーバ が異なると、 CGIプログラムやウェブサーバが.htaccessなどのファイルを読み込む際、挙動に違いが生じます。 例えば、HTTPとしてアクセスした場合はお手元のコンピュータが、 HTTPSとしてアクセスした場合は サーバそのものがアクセス元となります。 このため、SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。
    –引用終了–

    yamapyさんのされていることは環境変数とmod_rewriteを使用して RewriteCond %{HTTPS} off = SSLでなければ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] = httpsで始まるURLにリダイレクトさせよ になっています。
    さくらのサーバ上では環境変数で「SSLでなければ」の判断が普通にできないので「httpsで始まるURLにリダイレクト」したものがSSLでないと判断されてまたリダイレクトされ、ループ動作になっています。

    なので、正しい回答では「リダイレクトループの原因」はこの上の行。このやり方での対応方法は「無し」、他の解決方法は「知りません」でした。

    HTTP_X_SAKURA_FORWARDED_FORは裏ワザ的なものでずっと使えるかもわからないものなので試行錯誤と不具合対応の立ち回りの上手い方以外には勧められるものではないものです。
    他の方が賢明にも沈黙されている中、迂闊にしゃしゃり出てしまい申し訳ありません。先の回答は取り下げます。

    トピック投稿者 yamapy

    (@yamapy)

    gatolaboさん

    ありがとうございます。
    サクラサーバーではワードプレスのリダイレクトは難しいという結論ですね。
    他に答えがありそうですが引き続きお待ちしております。

    ちなみにリダイレクションズというプラグインを入れてやってみてもループはおきていました。

    さくらのレンタルサーバーの仕様を知らないのですが

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>

    がリダイレクトループの原因になってるのは確かかと思います。RewriteCond %{HTTPS} off以外のルールを追加してSSLか判断するか関連する変更を元に戻しプラグインでリダイレクトするのがいいかと。

    ENV:HTTPSって変数が使えそうですね。

    RewriteCond %{ENV:HTTPS} off

    Or

    // wp-config.php前半等に追記
    if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
        $_SERVER['HTTPS'] = 'on';
        $_ENV['HTTPS'] = 'on';
    }

    多分共有SSLと同じ方法でよさそうです。HTTP_X_SAKURA_FORWARDED_FORも多分使える(?)

    とはいってもおすすめはしないと(?)

    トピック投稿者 yamapy

    (@yamapy)

    Hinaloe様

    ありがとうございます。
    そしてごめんなさい。。。

    上記のやり方は

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{ENV:HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>

    をhtaccessに記述してプラス

    // wp-config.php前半等に追記
    if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
        $_SERVER['HTTPS'] = 'on';
        $_ENV['HTTPS'] = 'on';
    }

    という理解でいいでしょうか
    あまりプログラミング強くなくて申し訳ありません。

    サクラサーバーはどうも使いづらいですね。

    そうですね、それで問題なさそうならそれでいいかと。(リダイレクトループが解消しないのであればhtaccessの該当記述は削除してWordpressHTTPSを利用してみてください。)

    もちろん

    function is_ssl() {
    return true;
    }

    は消してくださいね。

    いまさらですが、
    下記を参考にしたら、なんとか解決しやした!

    https://www.harukas.org/blog/2278/

    ご参考まで。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「httpsへリダイレクトをしたいのですがリダイレクトループがかかる不具合」には新たに返信することはできません。