Tôi đang sử dụng Drupal 7. Trang đăng nhập cho người dùng của tôi được đặt tại / user / login, do đó, đường dẫn đăng nhập mặc định. Tôi cần trang đó được mã hóa bằng SSL để mọi người không truyền mật khẩu rõ ràng.
Tôi đã cấu hình Apache để trang web có thể được điều hướng qua HTTP hoặc HTTPS. Tuy nhiên, tôi muốn thực hiện một số quy tắc viết lại để tất cả các yêu cầu khác ngoài / người dùng / đăng nhập được thực hiện qua HTTP vì nó nhanh hơn và sẽ mang lại trải nghiệm tốt hơn cho người dùng. Tôi từ chối sử dụng Trang bảo mật tại thời điểm này vì hỗ trợ có lỗi trong Drupal Core và tôi sẽ không vá Core theo cách thủ công. Điều đó có nghĩa là tôi còn lại với việc sử dụng các quy tắc viết lại của Apache.
Tôi có các quy tắc sau:
<VirtualHost *:80>
...
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/user/login$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [L,R]
...
</VirtualHost>
<VirtualHost *:443>
...
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/user/login$
RewriteRule ^/(.*) http://%{HTTP_HOST}/$1 [L,R]
...
</VirtualHost>
Bây giờ với tôi, điều đó có ý nghĩa, nhưng Drupal dường như không thích nó.
Điều gì đang xảy ra như sau:
- Nếu tôi điều hướng xung quanh trang web bằng cách sử dụng HTTP đến bất kỳ trang nào khác ngoài / user / login, nó hoạt động tốt.
- Nếu tôi điều hướng đến / người dùng / đăng nhập qua HTTP, tôi sẽ được chuyển hướng đến trang trước.
- Nếu tôi điều hướng đến bất kỳ trang nào qua HTTPS, tôi sẽ được chuyển hướng đến trang đầu qua HTTP.