仮想ホストを使用しているすべてのURLの前にhttps:// wwwを強制できるソリューションを探しています。これは私が現在私の000-default.confファイルにあるものです:
<VirtualHost *:80>
ServerName www.domain.com
Redirect / https://www.domain.com/
</VirtualHost >
それはすべてのwwwを意味します。 https:// wwwにリダイレクトします。
今、私はすべての/他の形式のURLを https:// www にリダイレクトするコードがありません。同じ概念を使用します(Apacheは単純なリダイレクトではRewriteEngineを使用しないことを推奨しているため、RewriteEngineではありません)。
例えば:
彼らはすべてに行きます=> https://www.domain.com
誰かが私を正しい方向に向けることができれば、それは素晴らしいことです!
これは私のために働いた、あなたが好きなら私のドメインでそれをテストすることができます。
<VirtualHost *:80>
ServerName freesoftwareservers.com
ServerAlias *.freesoftwareservers.com
Redirect / https://www.freesoftwareservers.com/
</VirtualHost>
<VirtualHost *:443>
ServerName freesoftwareservers.com
ServerAlias *.freesoftwareservers.com
これを再実装するのに問題があり、/ sites-enabledから000-default.confシンボリックリンクを削除すると機能することがわかりました。どうしたのかわかりませんが、DNS側に他のDNSレコードが0個あります。Apacheはすべてのリダイレクトを行い、動作します。
必要なことを行うには、3つのリダイレクトが必要です。
http://example.com
からhttps://www.example.com
http://www.example.com
からhttps://www.example.com
https://example.com
からhttps://www.example.com
最初の2つはポート80からのプレーンHTTPなので、VirtualHostがあります。 ServerAliasセクションを使用すると、VirtualHostセクションを複数のホスト名(www.example.comおよびexample.com)に適用できます。
# Redirect http://example.com and http://www.example.com to main site
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
Redirect / https://www.example.com/
</VirtualHost >
次に、 https://example.com のみにVirtualHostが必要です。 HTTPSはポート443を使用します。
# Redirect https://example.com to main site
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com/
</VirtualHost >
注:「www。」の有無にかかわらず、ドメインの両方をサポートする証明書を使用して、SSL設定もセットアップする必要があります。 SSL設定のセットアップは、この質問の範囲外です。 (追加情報:これらは、必要に応じて2つの個別の証明書にすることができます.Let's EncryptやSNI)
「www」なしでドメインをサポートするSSL証明書がない場合https://example.com
からリダイレクトを実行できなくなります。リダイレクトは、ブラウザが証明書を確認した後にのみ発生します。ユーザーには、不一致の証明書エラーが表示されます。
次に、最後に、「有効な」サイトのwww.example.com上のHTTPS(ポート443)のVirtualHostセクションが必要です。
# Main site
<VirtualHost *:443>
ServerName www.example.com
# Put all your configuration for this site here
</VirtualHost >
リダイレクトをテストし、それらが機能していることを確認したら、リダイレクトで301ステータスを指定して(Redirect / https://www.example.com/
をRedirect 301 / https://www.example.com/
に変更する)、有効にする HSTS これにより、ユーザーのブラウザーはHTTPSの設定を記憶します。
Thomasrutterの答えに付け加えると、彼が提案したことをしているとき、私はまだ問題を抱えていました。 SSL情報を https://example.com 仮想ホストに追加する必要がある場合があります。たとえば、SNIを使用して、IPアドレスごとに複数のSSL証明書を許可する場合。
サーバーがhttpsリクエストにプレーンテキストを返すため、これがないとssl_error_rx_record_too_longエラーが発生する場合があります。
# Redirect https://example.com to main site
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com/
#for Apache Old Style (Valid on Apache <= 2.4.8) - just add in whats needed for your version
SSLEngine on
SSLCertificateFile "your certificate file.crt"
SSLCertificateKeyFile "your key file.key"
SSLCertificateChainFile "your chain file.crt"
</VirtualHost >