将所有 http 和 https 域流量重写为基于 https 的 URL 时出现问题

将所有 http 和 https 域流量重写为基于 https 的 URL 时出现问题

我正在尝试获得所有变化

http://www.example.com
http://example.com
https://www.example.com
https://example.com
www.example.com
example.com

全部重定向至

https://www.example.com

我有以下 mod_rewrite 块:

RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^([a-z.]+)?example.com$ [NC]
RewriteCond %{HTTP_HOST} example.com$ [NC]
RewriteRule .? https://www.example.com%{REQUEST_URI} [R=301,L]

似乎除了一件事之外都做了:

https://example.com不会被重定向到

https://www.example.com符合预期

如果我删除该条件:

ReWriteCond %{SERVER_PORT} !^443$

因此它既影响 http 又影响 https,但仍然不能按预期运行。

请问我哪里做错了?谢谢

答案1

您无法使用以下方式进行 SSL 到 SSL 重定向.httaccess

你必须为每个域名使用单独的 VirtualHost 条目(前提是你的 Web 服务器支持信噪比):

<VirtualHost *:443>
    ServerName example.com
    Redirect 301 / https://www.example.com
    SSLCertificateFile /etc/ssl/example.com.crt
    SSLCertificateKeyFile /etc/ssl/example.com.key
</VirtualHost>

相关内容