Giấy chứng nhận phải bao gồm cả www và không www https. Một số certs của nhà cung cấp bao gồm cả cho www.xxxx.yyy, nhưng chỉ một cho xxxx.yyy.
Bật viết lại:
RewriteEngine On
Làm cho tất cả https sử dụng http:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R=301]
Hãy chỉ https www sử dụng phi www https:
RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_HOST} ^www[.].+$
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301]
có thể không được xử lý không -www https, nếu không một vòng lặp xảy ra.
Trong [L, R = 301]:
- L = Nếu quy tắc đã được xử lý, không xử lý nữa.
- R = 301 = Yêu cầu trình duyệt/rô-bốt thực hiện chuyển hướng vĩnh viễn.
More generic
Một cách tiếp cận chung chung hơn - chứ không phải cổng phụ thuộc - là:
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA]
thực hiện bất kỳ url với www
thả nó.
RewriteCond %{HTTPS} !on
RewriteCond %{HTTPS} !1
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA]
để buộc bất kỳ url không phải https nào, ngay cả đối với những hệ thống hạ lưu từ trình cân bằng tải xuống https, hãy sử dụng https.
Lưu ý rằng tôi chưa thử nghiệm các tùy chọn forwarded
, vì vậy sẽ đánh giá cao phản hồi về bất kỳ sự cố nào với chúng.Những dòng này có thể bị bỏ sót nếu hệ thống của bạn không nằm phía sau bộ cân bằng tải.
ĐẾN HTTP_HOST hay không
Bạn có thể sử dụng ${HTTP_HOST}
là một phần của URL trong RewriteRule
, hoặc bạn có thể sử dụng rõ ràng kinh điển văn bản tên miền của bạn (xxxx.yyy
ở trên).
Chỉ định tên miền một cách rõ ràng đảm bảo rằng không có phương tiện uốn nhân vật nào được sử dụng trong URL do người dùng cung cấp để lừa trang web của bạn làm điều gì đó có thể không được chuẩn bị, hoặc ít nhất đảm bảo rằng tên miền thích hợp xuất hiện trong thanh địa chỉ, bất kể chuỗi URL nào đã mở trang.
Nó thậm chí có thể giúp chuyển đổi các tên miền mã hóa punycode để hiển thị các ký tự unicode thích hợp trong thanh địa chỉ.
Đánh dấu một câu trả lời đúng rồi! –