... khuyên RewriteCond %{HTTPS} off
và 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ó ý off
vs !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 .com
vào ^example.com\.com
chỉ 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-Security
tiê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.com
sang https://www.example.com
), được đặt theo điều kiện dựa trên env=HTTPS
kiểm tra Header
chỉ 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 always
từ khóa trên Header
chỉ 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 always
lệnh Header
nà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=HTTPS
môi trường không hoạt động như mong đợi. Vì vậy, tôi đã sử dụng E=HTTPS
cờ trên chuyển hướng www để đặt env=HTTPS
biế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=HTTPS
biế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 HTTPS
biế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 always
từ khóa được sử dụng trong Header
chỉ 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 preload
chỉ 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 preload
nà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ệ"?