htaccess force https không hoạt động nếu không có URI
Tôi chưa bao giờ làm việc với Apache, vì vậy tôi là một người mới hoàn toàn.
Tôi có một tài khoản multihosting trên trang web của nhà cung cấp, nơi 3 miền được sử dụng. Tôi muốn buộc kết nối https trên một miền, giả sử example.com, đó không phải là miền chính của gói lưu trữ. Những gì tôi đã làm là thêm một .htaccesstệp trong đường dẫn examplecom/public_html, thư mục chứa tất cả các tệp của trang web. Trong phần, .htaccesstôi đã sao chép-dán chuỗi này từ hướng dẫn của nhà cung cấp:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]
Trang web hoạt động chính xác nếu tôi truy cập trang có URI không trống, nhưng nó không có trên trang chính. Ví dụ: http://example.com/anypageđược chuyển hướng chính xác đến https://www.example.com/anypage, trong khi http://example.com/được chuyển hướng đến https://www.example.com/public_htmlvà không hiểu tại sao.
Trả lời
Có vẻ như bạn có thể có xung đột với các lệnh hiện có, tuy nhiên, bạn có thể thử thay đổi các lệnh hiện có của mình để xem liệu nó có tạo ra sự khác biệt hay không:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com/$1 [L,R=301]
Cung cấp .htaccesstệp nằm trong examplecom/public_htmlthư mục thì backreference ( $1) đã được capture chỉ nên chứa bất kỳ thứ gì sau tệp này (nếu có). Trong khi đó, REQUEST_URIbiến máy chủ luôn chứa đường dẫn URL đầy đủ.
Các RewriteBasechỉ thị là không cần thiết ở đây kể từ khi bạn đang sử dụng một URL tuyệt đối trong RewriteRule thay .
Bạn sẽ cần xóa bộ nhớ cache của trình duyệt trước khi kiểm tra vì 301 có thể đã bị lỗi đã được lưu vào bộ nhớ cache. Kiểm tra với chuyển hướng 302 (tạm thời) để tránh các vấn đề về bộ nhớ đệm.