apache2:将所有虚拟主机批量重定向到 https,非 www

apache2:将所有虚拟主机批量重定向到 https,非 www

我有一台 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>

相关内容