Để bắt buộc HTTPS trước tiên, bạn phải kiểm tra biến môi trường chính xác %{HTTPS} off
, nhưng quy tắc của bạn ở trên sau đó sẽ bổ sung www.
Vì bạn có quy tắc thứ hai để thực thi www.
, không sử dụng quy tắc đầu tiên.
RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Về ủy quyền
Khi đứng sau một số hình thức ủy quyền, theo đó máy khách đang kết nối qua HTTPS với proxy, bộ cân bằng tải, ứng dụng Hành khách, v.v., %{HTTPS}
biến có thể không bao giờ on
và gây ra vòng lặp viết lại. Điều này là do ứng dụng của bạn thực sự nhận được lưu lượng HTTP đơn giản mặc dù máy khách và bộ cân bằng proxy / tải đang sử dụng HTTPS. Trong những trường hợp này, hãy kiểm tra X-Forwarded-Proto
tiêu đề thay vì %{HTTPS}
biến. Câu trả lời này cho thấy quá trình thích hợp
RewriteCond %{HTTPS} =off