我有一个示例应该始终导致https://example.com,即使用户输入www.example.com, https 与否。理想情况下,自动化的letsencrypt config https 配置文件应该可以工作。
- 我试图删除 www 的 A 记录并使用 CNAME 来指向 example.com 或 @。这似乎没有任何影响,用户仍然最终访问 www。我不知道为什么。
这是我当前的配置:
<VirtualHost [IPV6]:80 IPV4:80>
ServerAdmin [email protected]
DocumentRoot /home/example/public_html
ServerName example.com
ServerAlias www.example.com
ErrorLog logs/example.error.log
CustomLog logs/example.acccess.log common
<Directory /home/example/public_html>
Options FollowSymLinks
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost [IPV6]:443 IPV4:443>
ServerAdmin [email protected]
DocumentRoot /home/example/public_html
ServerName example.com
ServerAlias www.example.com
ErrorLog logs/example.error.log
CustomLog logs/example.acccess.log common
<Directory /home/example/public_html>
Options FollowSymLinks
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
</VirtualHost>
但是,即使我将其添加到 :443 配置中, https: //www.example.com 也会抛出错误的证书:
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]
如何将 http 和 https 请求重定向到www.example.com到https://example.com?
客户端到达https://www.example.com,因此即使您重定向到https://example.com,您也需要两个 SSL 证书(一个用于 example.com,另一个用于www.example.com)或对两个域都有效的单一 SSL 证书。
如果您使用certbot颁发 Let's Encrypt 证书,您可以使用多个
-d
参数来指定多个域,例如: