web-dev-qa-db-ja.com

https複数のリダイレクト

プロトコルをhttpからhttpsに変更しています。

ワードプレスをサブディレクトリとしてインストールしています(例:www.example.com/blog)

ロードバランサの背後にサーバがあります。ロードバランサへの要求は暗号化されていますが、ロードバランサからサーバへの要求は暗号化されていません。

Httpsアドレスを反映するようにhomeおよびsiteurlパラメータを更新しました。そして私はwp-config.phpファイルに次のコードを追加しました:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
       $_SERVER['HTTPS']='on';

何らかの理由で、私が https://www.example.com/blog のURLにアクセスすると、次のリダイレクトが発生します。 https://...blog - > http://...blog/

http://...blog/ - > https://...blog/

私は1つのリダイレクト(スラッシュを追加するためのもの)と共に生きることができますが、なぜそれがhttp://アドレスにリダイレクトされるのか理解できません。まだhttp://を参照しているものは私の設定にはありません。

それはなぜこれをしているのですか?

ブラウザのキャッシュをクリアしようとしました。 .htaccessファイルもありますが、.htaccessファイル内のすべてのコードがコメント化されている場合でもリダイレクトが行われるため、このファイルとは無関係です。

誰かがまだhtaccessファイルが適切であると思う:私はhtaccessファイルに2つの規則があります:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} =http

RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

httpをhttpsにリダイレクトします。

そして

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

スラッシュを追加するための(私は思う)。

最初の規則は関係ありませんが(私はhttpsアドレスに直接行きますので)。そして、2番目のルールをコメントしても問題の問題には影響しません。

httpsを使用しているという事実についてwordpressを更新する必要がある場所が他にありますか?

ありがとう。

2
theyuv

これは多少推測されますが、おそらくWebサーバーの設定の結果です。あなたのサーバーがおそらくすることは、リクエストがサイトのblog URLをロードしようとしていることを見ることです。 blogはスラッシュを追加してそれにリダイレクトするディレクトリであることをチェックアウトして確認します。これで、ロードバランサーはhttpリクエストを送信するので、Webサーバーはhttpにリダイレクトします。その後、リクエストはwordpressディレクトリに対して行われ、すべてのhtaccessおよびwordpressロジックが起動し、正しい情報/リダイレクトなどを提供します。

解決策...これが良い話だけでなく本当の話でもある場合は、ルートディレクトリのhtaccess内のhttpからhttpsへのリダイレクトでおそらく解決するはずです。

それが実際に問題を解決するのであれば(そして、あなたは今のところ価値があると思います)、Apacheは各要求ごとに階層内の各ディレクトリのすべてのhtaccessを読み込んで実行するので「無駄な時間の無駄です。

1
Mark Kaplun

データベースのbaseurlsを更新する必要があります。つまり、オプションテーブルのsiteurlおよびhomeのoption_valuesです。

次のコードはあなたのために頑強にそれをするでしょう。ここで私が示した接頭辞に注意してください、 "wp_"が、もちろん、それはそうではありません! :)もちろんあなたはサイト名を変更する必要があります。

UPDATE wp_options SET option_value = replace(option_value, 'http://www.example.com/blog', 'https://www.example.com/blog') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = REPLACE (guid, 'http://www.example.com/blog', 'https://www.example.com/blog');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://www.example.com/blog', 'https://www.example.com/blog');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://www.example.com/blog','https://www.example.com/blog');
0
mayersdesign

あなたの.htaccessファイルでこれを試してください

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

それが役立つかどうかを確認

0
JItendra Rana

WordPressファイルを自分で編集する必要はありません。 WordPressは、手動でコードを変更しなくても、httpまたはhttpsのどちらでも使用できます。

既存のWordPressサイトのプロトコルを変更する必要がある場合は、2つのことができます。

  1. あなたのブログがhttpとhttpsを通してアクセス可能であることを確認してください。それから、バックエンドであなたのWordPress設定に切り替えて、 http://example.org から https://example.org にあるブログのURLを更新するだけです。 htaccessファイル自体

  2. データベース上で検索と置換を行うことができます。そのためには、単純な検索と置換のプロセスでは認識されない、シリアル化されたデータに注意する必要があります。 from interconnect のようなツールを使うことをお勧めします。

wp-config.phpにハードコードされたURLが含まれていないことを確認してください( "サイトURLの変更" を参照)。

0
Felix