Các điều kiện của bạn hoàn toàn VÀ VÀ và điều kiện thứ hai của bạn sẽ luôn đúng (trừ khi bạn có các tên miền khác), vì vậy các quy tắc hiện tại của bạn sẽ chỉ chuyển hướng lưu lượng truy cập không có SSL.
Bạn cần OR
các điều kiện và phủ nhận điều kiện www
(thứ hai):
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443 [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
Nếu SERVER_PORT
không phải là 443 (tức là không phải HTTPS) hoặc máy chủ không bắt đầu bằng www.
(tức là bạn đang truy cập tên miền trần) thì hãy chuyển hướng đến URL chính tắc.
Tuy nhiên, việc này có chuyển hướng https://example.com
đến hay không https://www.example.com
sẽ phụ thuộc vào chứng chỉ bảo mật của bạn. (Trang web của bạn cần có thể truy cập được bằng cả www và không www qua SSL để chuyển hướng .htaccess để kích hoạt.)
http://example.com
(ví dụ: HTTP và không phải www), vì trước tiên nó sẽ chuyển hướng đến HTTPS trên cùng một máy chủ (tức là không cówww
) và sau đó chuyển hướng đếnwww
như một chuyển hướng thứ hai. Bạn có thể sửa điều này bằng cách đơn giản đảo ngược hai quy tắc này.