我有一台 Apache 服务器,在各种配置文件中有许多 VirtualHost。我想我可以定义一条综合规则,将所有流量重定向到所有这些主机到 HTTPS 和非 www 网址。
不幸的是,下面的配置(我在我的000-default.conf
文件中)只部分起作用。它适用于以以下开头的 URL:http://www.域名,https://域名(没有 www)和https://www.域名. 它不适用于那些以http://域名。Apache 抛出 403 Forbidden(无法访问此服务器)。
作为一个奖金另外,重定向还会添加一个额外的尾随斜杠,我想将其删除。
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domain/chain.pem
</VirtualHost>
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.?(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,NC]
</VirtualHost>
答案1
如果您无法复制 vHosts 的配置,您可以尝试按照此处所述的方式进行设置:在同一个 VirtualHost 上提供 http (端口 80) 和 https (端口 443) 服务
答案2
就是这样。我花了一段时间才理解RewriteRule
语法,并且RedirectMatch
在这种情况下我不能使用它(Apache 推荐的)。
<VirtualHost *:443>
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]
</VirtualHost>
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)*(.*)$ [NC]
RewriteRule ^/(.*)$ https://%2/$1 [R=301,NC,L]
</VirtualHost>