Apache-2.4

使用 zonefile 或letsencrypt 配置 www.domain.com 和 domain.com 以始終轉發到 domain.com

  • August 31, 2020

我有一個範例應該始終導致https://example.com,即使使用者輸入www.example.com, https 與否。理想情況下,自動化的letsencrypt config https 配置文件應該可以工作。

  • 我試圖刪除 www 的 A 記錄並使用 CNAME 來指向 example.com 或 @。這似乎沒有任何影響,使用者仍然最終訪問 www。我不知道為什麼。

這是我目前的配置:

<VirtualHost [IPV6]:80 IPV4:80>
   ServerAdmin webmaster@example.com
   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 webmaster@example.com
   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.comhttps://example.com

客戶端到達https://www.example.com>,因此即使您重定向到<https://example.com,您也需要兩個 SSL 證書(****一個用於 example.com,另一個用於www.example.com)或對兩個域都有效的單一 SSL 證書

如果您使用certbot頒發 Let’s Encrypt 證書,您可以使用多個-d參數來指定多個域,例如:

certbot certonly --webroot -w /var/www/example -d www.example.com -d example.com

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