web-dev-qa-db-ja.com

プロキシの背後でHTTPSをHTTPにリダイレクトする方法(CloudFlare)

HTTPをHTTPにリダイレクトしたい、.htaccessファイルの次のコードを試した

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

.httaccessファイルで次のコードも試しましたが、これも機能しませんでした。

Options +FollowSymlinks

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{SERVER_PORT} ^443$
    RewriteRule ^(.*)$ http://%{HTTP_Host}/$1 [R=301,L]

    # BEGIN WordPress
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    # END WordPress
</IfModule>

いくつかのHTTPSからHTTP WordPressプラグインも試してみましたが、これも機能しませんでした。

この問題を解決する方法を教えてください。

4
Amit

はい、Flexible SSL(無料)クラウドフレアサービスを使用しています

これが問題です"。 Antonyがコメントで示唆しているように。サーバーがポート80(プレーンHTTP)で要求に応答しています。 SSL接続は、訪問者とCloudFlareの間のみです。 CloudFlareとサーバー間の接続は暗号化されていません。これが「フレキシブルSSL」(無料)CloudFlareサービスです。

参照:
https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-mean-

すべてのリクエストをHTTPにリダイレクトしたいので、CloudFlareでSSLオプションを無効にする必要があります。


UPDATE:サーバーはプレーンHTTPで動作しており、SSLはフロントエンドプロキシ(この場合はCloudFlare)によって処理されているため、プロキシがHTTPリクエストヘッダーでこの情報を送信する場合は、元のリクエストのプロトコル(HTTPまたはHTTPS)を検出します。 X-Forwarded-Proto慣例により。

From Wikipedia-HTTPヘッダーフィールドのリスト-X-Forwarded-Proto

リバースプロキシ(またはロードバランサ)は、リバースプロキシへのリクエストがHTTPSであっても、HTTPを使用してWebサーバーと通信できるため、HTTPリクエストの発信元プロトコルを識別するための事実上の標準。

これをHTTPSからHTTPへのリダイレクトに組み込む:

RewriteCond %{HTTP:X-Forwarded-Proto} =https [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

参照:
Cloudflareサポート-WordPressでフレキシブルSSLを有効にした後、無限リダイレクトループエラーを修正するにはどうすればよいですか? (WordPress以外の関連情報を含む)

2
MrWhite