certbot 経由で SSL をインストールしたので、すべてのサイトに SSL 経由でアクセスできます。
ただし、ブラウザの URL に http が使用されている場合、以下の最初の URL のみが https にリダイレクトされます。他の URL は https にリダイレクトされず、http のままになります。
- マイドメイン
- xx.mydomain.com
- yy.mydomain.com
ポート 80 の場合、virtualhosts ファイル内の書き換えロジックの内容は次のとおりです。
RewriteEngine on
RewriteCond %{SERVER_NAME} =mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
ポート 443 の場合、仮想ホストの内容は次のとおりです。
DocumentRoot /var/www/html
ServerName mydomain.com
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias xx.mydomain.com
ServerAlias yy.mydomain.com
SSLCertificateFile /etc/letsencrypt/live/yy.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yy.mydomain.com/privkey.pem
ご覧のとおり、ドメインとサブドメインは同じドキュメント ルート ディレクトリを指しています。
ブラウザに http が入力されたときに、上記のポイントにリストされているすべての URL を https にリダイレクトするにはどうすればよいですか? サーバー エイリアスとして構成されたサブドメインでこれを機能させるには、ポート 80 の書き換えロジックで正確に何を変更する必要があるのかわかりません。
答え1
設定は条件付きです ( へのリクエストが対象=example.com
)。そのため、RewriteRule は へのリクエストをリダイレクトしませんxx.example.com
。
どちらかを選択できます
その条件を改善します (特定の (サブ) ドメインのみをリダイレクトしたい場合)。あまり美しくはありませんが、たとえば次のようになります。
RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =xx.example.com [OR] RewriteCond %{SERVER_NAME} =yy.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
new-subdomain.example.com
条件を完全に削除し、すべてを https にリダイレクトします (有効な証明書がまだない https にもリダイレクトされるリスクがあります)RewriteEngine on RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]