web-dev-qa-db-ja.com

Cloudflare Wordpress HTTPSにリダイレクトすることにより完全にキャッシュされます

SSL証明書なし(自己署名なし)でドメインのルート(サブフォルダーまたはサブドメインではない)でApacheを使用する共有ホスティングパッケージにあるWordPress(WP)インストールがあります。

そのドメインをCloudflare(CF)の背後に置き、ページルールセクションで柔軟なSSLオプションを有効にし、キャッシュを完了しました。 WPの管理パネルを使用できるようにするには、すべてをキャッシュするもの(*example.com/wp-login*)の前にキャッシュを無効にする2つのルール(*example.com/wp-admin*および*example.com/*)が必要です。

これはうまく機能しますが、無料のWebサイトごとに3つのルールの制限に達し、HTTPSリダイレクトを強制するルールを使用できません。この方法でブラウザでhttp://example.com/を開くと、https://example.com/への301リダイレクトを実行する代わりに、すぐに読み込まれます(ステータス200を返します)。これは、私が達成しようとしている結果です(直接https://example.comを読み込むと、すべてが意図したとおりに機能します)。

私はインターネット周辺から数多くの解決策を試しましたが、どれも意図したとおりに機能しません。実際、それらのほとんどは機能しますが、サイトが開発モードであり、キャッシュがない場合のみです。開発モードをオフにすると、.htaccessファイルのルールはユーザーをhttpsバージョンにリダイレクトしますが、その後、ユーザーはそのバージョンへの別のリダイレクトを再試行し、サイトの動作が停止します。

これは共有ホスティングであるため、未加工のApacheログを見ることができないため、curl -I http://example.comおよびcurl -I https://example.comでのみリターンコードを確認できます。

私が今まで試したキャッシュなしのソリューションは、これにかなり似ています:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

CFの書き換えによる推奨も試しました(別のドメインのブログ投稿によると、その投稿からCFサイトに指定されたリンクでそれらを見つけることができないようです)。

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' 
RewriteRule ^(.*)$ https://example.com/$1 [L]

そして

RewriteCond %{HTTP:CF-Visitor} !'"scheme":"http"' 
RewriteRule ^(.*)$ https://example.com/$1 [L] 

ただし、結果は常に上記と同じです。開発モードが有効になるまで正常に動作し、キャッシュが起動すると、httpsに移動した後でもhttpsにリダイレクトし続けます。

WPセットアップに関する詳細情報:

  • wp-config.phpにこの行があります-$_SERVER['HTTPS'] = 'on';

  • 公式CFプラグインをインストールしました

  • また、「CloudFlare Flexible SSL」および「WP Force SSL」プラグインを使用しようとしましたが、機能していないようでした(または少なくとも必要なことを実行していなかったため)。

現在、私はApacheで動作する答えに主に興味がありますが、他のホストでもnginxを使用しており、同じ問題を修正する方法を知っていても構いません(まだ存在しないためこの特定のセットアップを使用する必要がありました)。

この投稿がだまされている場合は申し訳ありませんが、同様の質問はどこにも見つかりませんでした。また、質問がここに行くべきなのか、stackoverflowやwordpress.stackexchange.comに行くべきなのか、それともserverfaultなのかわからない...

// EDIT:

明確にするために、CFのページルールで[すべてキャッシュ]オプションが選択されている場合にのみ問題が表示されます。このオプションがないと、.htaccessリダイレクトは問題なく動作します。

2
Sledge Hammer

フレキシブルSSLをCloudFlareと連携させるには:

次に、CloudFlareキャッシュをクリアします。 HTTP-> HTTPSリダイレクトを強制せずにサイトが機能することを確認します。

これが機能する場合、次のように.htaccessファイルにリダイレクトを設定できるはずです。

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301,NE]

ご覧ください: WordPressでフレキシブルSSLを有効にした後、無限リダイレクトループエラーを修正するにはどうすればよいですか?

1
mjsa