Apache2

如何為配置為 ServerAlias 的多個子域重定向到 https?

  • April 19, 2022

我已經通過 certbot 安裝了 SSL,我的所有網站都可以通過 SSL 訪問。

但是,當在瀏覽器 url 中使用 http 時,只有下面的第一個被重定向到 https。其他人不會被重定向到 https 並繼續在 http 中。

  1. mydomain.com
  2. xx.mydomain.com
  3. 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 的重寫邏輯中究竟需要更改哪些內容才能使其適用於配置為伺服器別名的子域。

您的配置是有條件的(根據對 的請求=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]
  • 完全刪除條件(並將所有內容重定向到 https(有可能您還重定向new-subdomain.example.com到您還沒有有效證書的 https)
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

引用自:https://serverfault.com/questions/1098859