如何将配置为 ServerAlias 的多个子域重定向到 https?

如何将配置为 ServerAlias 的多个子域重定向到 https?

我已经通过 certbot 安装了 SSL,并且我的所有网站都可以通过 SSL 访问。

但是,当浏览器 URL 中使用 http 时,只有下面第一个重定向到 https。其他的不会重定向到 https,而是继续使用 http。

  1. 我的域名
  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

如您所见,域和子域指向同一个文档根目录。

如何让上述几点列出的所有 URL 在浏览器中输入 http 时重定向到 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]
    

相关内容