如何將配置為 ServerAlias 的多個子網域重新導向至 https?

如何將配置為 ServerAlias 的多個子網域重新導向至 https?

我已經透過 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 的重寫邏輯中到底需要更改什麼才能使其適用於配置為伺服器別名的子網域。

答案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]
    

相關內容