web-dev-qa-db-ja.com

cPanelでhttpをhttpsにリダイレクトするのが最善の方法は何ですか?

SSL証明書があるドメインに新しいサイトをセットアップしています。 DNSはすべて正しく構成されており、http://example.comまたはhttps://example.comのいずれかのURLでサイトにアクセスできます。

現在、http://example.comhttps://example.comに、http://www.example.comhttps://example.comにリダイレクトしています。

ただし、.htaccessファイルを削除しても機能するため、それがどのように機能するのか本当に理解していません。 .htaccessを変更して、私が遭遇したテクニックのいずれかを使用してリダイレクトすると、「リダイレクトが多すぎます」というエラーが表示されます。私が理解していない何かが起こっているに違いない。

http://example.com/anythinghttps://example.com/anythingにリダイレクトするのが理想的です

何か案は?

私のサーバーはCentOS 6.6を使用しています。 「uname -r」からの出力:

2.6.32-504.12.2.el6.x86_64

必要に応じて詳細情報を提供できます。

「リダイレクトが多すぎる」原因となった.htaccessコードの例を追加しました。

RewriteCond %{HTTP_Host} ^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
2
Alan Spark

Webアプリケーション(つまり、WordPress-コメントで言及)が既に適切なHTTPからHTTPSおよびwwwからwww以外へのリダイレクトを発行している可能性が非常に高いです。ただし、.htaccessを使用する方が間違いなく効率的です * 1HSTS の実装を計画している場合、Webアプリケーションが正しいリダイレクトを発行していない可能性があります。

(* 1-メインサーバーの設定を使用することをお勧めしますが。)


「リダイレクトが多すぎる」原因となった.htaccessコードの例を追加しました。

RewriteCond %{HTTP_Host} ^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

これは、HTTPからHTTPSへのリダイレクトではなく(実際、何でもありません)、リダイレクトループ(つまり、「リダイレクトが多すぎます」ブラウザーエラー)になります。基本的に、要求されたホストがexample.comの場合、example.comにリダイレクトされます(プロトコルに関係なく)。したがって、それ自体にリダイレクトします。

コメントで述べたように、cPanel「リダイレクト」インターフェースを使用してHTTPからHTTPSへのリダイレクトを実装することはできません。 cPanelインターフェイスを使用して、非常に単純なリダイレクトのみを実行できます。cPanelインターフェイスは、完全ではありませんが、警告がないわけではありません。 WordPressを使用している場合は、.htaccessファイルを手動で編集してcPanelを使用して単純なリダイレクトを構成することさえできません。 (cPanelは常に.htaccessファイルの最後にリダイレクトコードを追加します。これは、特にWordPressフロントコントローラーの後にあります。したがって、ほとんどの場合、リダイレクトディレクティブは処理されません。- cPanelドキュメントはこれを通知します 。)

(mod_rewriteを使用して).htaccessファイルに追加するリダイレクトディレクティブは、WordPressフロントコントローラーのbeforeに移動する必要があります、つまり.htaccessファイルの上部。

HSTS の実装を計画している場合、HTTPからHTTPSへのリダイレクトは同じHostにリダイレクトする必要があるため、HTTP HTTPSへの変換は、標準のwww/non-wwwリダイレクトの前に(そして別の)行う必要があります。このシナリオでの適切なHTTPからHTTPSへのリダイレクトについては、@ jcanepaの回答を参照してください。その後、wwwからwww以外へのリダイレクト(正規のホスト名のように見える)を使用してこれを実行できます。例えば:

# www to non-www redirect only
# (NB: This must go AFTER the HTTP to HTTPS redirect if implementing HSTS)
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

ただし、 HSTS を実装するつもりがない場合は、代わりにHTTPからHTTPSおよびwwwから非wwwへの標準リダイレクトを単一のリダイレクトに結合できます(潜在的な2番目のリダイレクトを防止します)。例えば:

RewriteEngine On

# HTTP to HTTPS and www to non-www
# (NB: Not suitable for HSTS)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]
2
MrWhite

Apacheの場合、サイトのルートに.htaccessを実装することをお勧めします。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
2
jcanepa