Buộc SSL và www trong .htaccess


11

Tôi đang tìm cách để buộc SSL và www.

Tôi đã có thể buộc cả hai riêng rẽ nhưng cùng nhau tôi tiếp tục gặp phải các vấn đề chuyển hướng. Đoạn mã sau hoạt động khi xử lý URL theo định dạng này: http://example.comvà chuyển hướng chính xác đến https://www.example.comnhưng khi URL đến là https://example.comnó sẽ không chuyển tiếp đến https://www.example.com- Bạn có đề xuất nào không?

EDIT: nó cũng nên gửi http://www.example.comđến https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Câu trả lời:


7

Dòng đầu tiên được sử dụng để ngăn URL nội bộ được viết lại. Điều đó có thể khiến các trang khác nhau được hiển thị, vì vậy tôi đã xóa nó.

Nếu máy chủ lưu trữ example.comhoặc không được yêu cầu qua HTTPS, nó sẽ được viết lại thành https://example.com/. Tức là, nó ghi đè http://example.com, http://www.example.comhttps://example.comđể https://www.example.comtrong một hành động.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Tài liệu về mod_rewrite cho Apache 2.2 .

Nếu bạn có tên miền phụ như thế forum.example.com, quy tắc đầu tiên sẽ là như vậy. Nếu không, bạn cũng có thể làm một trận đấu tiêu cực www.example.com.



0

Thử đi:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

0

Bạn cũng có thể sử dụng các dòng sau mà tôi sử dụng và hoạt động hoàn hảo.

(Xóa RewriteCond hàng đầu nếu bạn không sử dụng CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

0

Chỉ cần thực hiện điều này cho trang web của tôi. Hoạt động như một lá bùa! Đã thêm vào đầu tệp .htaccess của tôi. Chuyển hướng tất cả các trường hợp người nhập www hoặc không www, http hoặc https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect

0

Tôi đã thử nghiệm tất cả các đề xuất được đưa ra ở trên, nhưng không có đề xuất nào bao trùm toàn bộ kịch bản.

Tôi muốn tất cả các du khách đi đến https://www.example1.com/

https://www.example1.com/Tuy nhiên, một số mã được cung cấp bởi những người dùng khác đã làm việc để đưa URL không an toàn và / hoặc không có www đến , tuy nhiên, không có mã nào trong số chúng https://example1.comđược chuyển đổi thành "www".

Tôi có trang web của tôi được lưu trữ với GoDaddy, trong trường hợp điều này làm cho bất kỳ sự khác biệt.

Đây là mã làm việc cho tôi:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example1\.com$ [OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example1.com/$1 [L,R=301]

Dòng cuối cùng cũng có thể là:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Nhưng tôi đã sử dụng mã "301" để gửi tin nhắn " di chuyển vĩnh viễn " với hy vọng rằng Google và có thể các công cụ tìm kiếm khác sẽ cập nhật các liên kết cũ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.