... khuyên RewriteCond %{HTTPS} offvà những người khác cóRewriteCond %{HTTPS} on
Điều đó sẽ không có ý nghĩa trong bối cảnh được đưa ra vì đây rõ ràng là những điều đối lập (tôi sẽ thấy thú vị khi xem các ví dụ đầy đủ mà bạn đang trích dẫn từ đây).
Tuy nhiên, có lẽ bạn có ý offvs !on? Đây là tương đương trong bối cảnh này. Các !tiền tố phủ nhận regex, do đó hiệu quả có nghĩa không "on" (tức. Nó phải là "off").
Vì vậy, trong ngữ cảnh của các chỉ thị của bạn ở trên, nơi bạn đang kiểm tra xem HTTPS không hoạt động hay không, thì những điều sau đây là tương đương:
# Does the HTTPS server variable contain "off"?
RewriteCond %{HTTPS} off
# Does the HTTPS server variable not contain "on"?
RewriteCond %{HTTPS} !on
Biến máy chủ HTTPS được đặt thành "bật" hoặc "tắt". (Hoặc, nó hoàn toàn không được thiết lập - nhưng điều đó phụ thuộc vào thiết lập máy chủ / SSL của bạn và bạn sẽ phát hiện ra điều đó ngay bây giờ.)
Mà bạn sử dụng thực sự chỉ là một vấn đề ưu tiên.
Các ghi chú khác về HSTS và .htaccess
# Redirect to www
RewriteCond %{HTTP_HOST} ^example.com\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [E=HTTPS,R=301,L]
# Security header
Header set Strict-Transport-Security "max-age=63072000; preload; includeSubdomains" env=HTTPS
(Tôi cho rằng phần thêm .comvào ^example.com\.comchỉ là một lỗi đánh máy? Điều đó chỉ nên ^example\.com.)
E=HTTPS- Việc cài đặt biến môi trường HTTPS trên RewriteRule chuyển hướng dường như được yêu cầu để đặt Strict-Transport-Securitytiêu đề phản hồi HTTP trên chuyển hướng chính tắc (chỉ HTTPS) không chuyển hướng www sang www [* 1] (tức là https://example.comsang https://www.example.com), được đặt theo điều kiện dựa trên env=HTTPSkiểm tra Headerchỉ thị Tuy nhiên, để tiêu đề này được đặt trên chuyển hướng , bạn cũng cần sử dụng alwaystừ khóa trên Headerchỉ thị, như vậy:
Header always set Strict-Transport-Security "max-age=63072000; preload; includeSubdomains" env=HTTPS
Như đã lưu ý trong các tài liệu Apache , liên quan đến việc sử dụng alwayslệnh Headernày khi đặt tiêu đề trên các chuyển hướng :
- Bạn đang thêm tiêu đề vào phản hồi không thành công (không phải 2xx) được tạo cục bộ, chẳng hạn như chuyển hướng, trong trường hợp đó chỉ có bảng tương ứng
alwaysđược sử dụng trong phản hồi cuối cùng.
[* 1] Tiêu đề này phải được đặt trên chuyển hướng để đáp ứng điểm 4.1 của các yêu cầu gửi tải trước HSTS :
Nếu bạn đang phục vụ một chuyển hướng bổ sung từ trang web HTTPS của mình, chuyển hướng đó vẫn phải có tiêu đề HSTS (chứ không phải là trang mà nó chuyển hướng đến).
Chỉ cần một nhận xét bổ sung về bài viết được liên kết trong các bình luận bên dưới, nói rằng:
Biến env=HTTPSmôi trường không hoạt động như mong đợi. Vì vậy, tôi đã sử dụng E=HTTPScờ trên chuyển hướng www để đặt env=HTTPSbiến môi trường cho yêu cầu tiếp theo .
Bit cuối cùng về việc thiết lập " env=HTTPSbiến môi trường cho yêu cầu tiếp theo" không hoàn toàn chính xác. Đó là thiết lập HTTPSbiến môi trường trên phản hồi (chuyển hướng) hiện tại . Vào thời điểm "yêu cầu tiếp theo" xuất hiện (tức là trình duyệt đã phản hồi chuyển hướng), biến môi trường này (đã được đặt ở trên) đã bị lãng quên từ lâu. nhưng điều này không yêu cầu alwaystừ khóa được sử dụng trong Headerchỉ thị (như đã đề cập ở trên).
Header always set Strict-Transport-Security "max-age=63072000; preload; includeSubdomains" env=HTTPS
Chỉ là một điểm nhỏ, và có lẽ điều này không thực sự quan trọng, nhưng ... tôi sẽ bao gồm preloadchỉ thị ở cuối danh sách các chỉ thị. Ví dụ:
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" env=HTTPS
Lệnh preloadnày không thực sự là một phần của đặc tả kỹ thuật bảo mật giao thông nghiêm ngặt HTTP (HSTS) . Nó chỉ được yêu cầu bởi danh sách tải trước. Các tác nhân / trình duyệt khác không sử dụng cái này và thậm chí có thể không hiểu điều này, vì vậy sẽ hợp lý hơn nếu đặt cái này ở cuối danh sách. Một số phân tích có thể dừng ngay khi chúng đạt được chỉ thị "không hợp lệ"?