我已经通过 certbot 安装了 SSL,我的所有网站都可以通过 SSL 访问。
但是,当在浏览器 url 中使用 http 时,只有下面的第一个被重定向到 https。其他人不会被重定向到 https 并继续在 http 中。
- mydomain.com
- 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 的重写逻辑中究竟需要更改哪些内容才能使其适用于配置为服务器别名的子域。
您的配置是有条件的(根据对 的请求
=example.com
),因此 RewriteRule 不会将请求重定向到xx.example.com
.你可以
改善这种情况(当您仍然只想重定向特定(子)域时)。不是很漂亮,但例如:
完全删除条件(并将所有内容重定向到 https(有可能您还重定向
new-subdomain.example.com
到您还没有有效证书的 https)