web-dev-qa-db-ja.com

https://およびwwwを強制します。仮想ホストApache2を使用

仮想ホストを使用しているすべての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ではありません)。

例えば:

  • http://domain.com
  • http://www.domain.com
  • https://domain.com

彼らはすべてに行きます=> https://www.domain.com

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです!

5
Edward

これは私のために働いた、あなたが好きなら私のドメインでそれをテストすることができます。

<VirtualHost *:80>
    ServerName freesoftwareservers.com
    ServerAlias *.freesoftwareservers.com
    Redirect / https://www.freesoftwareservers.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName freesoftwareservers.com
    ServerAlias *.freesoftwareservers.com

http://domain.com

http://www.domain.com

https://domain.com

これを再実装するのに問題があり、/ sites-enabledから000-default.confシンボリックリンクを削除すると機能することがわかりました。どうしたのかわかりませんが、DNS側に他のDNSレコードが0個あります。Apacheはすべてのリダイレクトを行い、動作します。

13

必要なことを行うには、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の設定を記憶します。

4
thomasrutter

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 >
1
funferret.com