Ssl

apache2:將所有虛擬主機批量重定向到 https,非 www

  • May 23, 2018

我有一台 Apache 伺服器,在各種 conf 文件中有許多 VirtualHost。我想我可以定義一個總括規則來將所有這些主機的所有流量重定向到 HTTPS 和非 www url。

不幸的是,下面的配置(我的000-default.conf文件中有)只能部分工作。它適用於以http://www.domain>、<https://domain(無 www)和https://www.domain>開頭的網址。它不適用於以<http://domain開頭的使用者。Apache 拋出 403 Forbidden(無法訪問此伺服器上的 / )。

作為獎勵,重定向還添加了一個額外的斜杠,我想刪除它。

&lt;VirtualHost *:443&gt;
       SSLEngine on
       SSLCertificateFile /etc/letsencrypt/live/domain/cert.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
       SSLCertificateChainFile /etc/letsencrypt/live/domain/chain.pem
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
       RewriteEngine on
       RewriteCond %{HTTP_HOST} ^www\.?(.*)$ [NC]
       RewriteRule ^(.*)$ https://%1/$1 [R=301,NC]
&lt;/VirtualHost&gt;

這樣做。在這種情況下,我花了一些時間來理解RewriteRules 語法以及我不能使用的RedirectMatch(Apache 推薦的)。

&lt;VirtualHost *:443&gt;
       ServerAlias www.*
       SSLEngine on
       SSLCertificateFile /etc/letsencrypt/live/blaap.be/cert.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/blaap.be/privkey.pem
       SSLCertificateChainFile /etc/letsencrypt/live/blaap.be/chain.pem

       RewriteEngine on
       RewriteCond %{HTTP_HOST} ^(www\.)*(.*)$ [NC]
       RewriteRule ^/(.*)$ https://%2/$1 [R=301,NC,L]
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
       RewriteEngine on
       RewriteCond %{HTTP_HOST} ^(www\.)*(.*)$ [NC]
       RewriteRule ^/(.*)$ https://%2/$1 [R=301,NC,L]
&lt;/VirtualHost&gt;

如果您無法複製 vHosts 的配置,您可以嘗試按照此處所述的方式進行設置:Serve http (port 80) and https (port 443) on same VirtualHost

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