base_url cho cả http và https?


7

Tôi có một trang web có thể truy cập cả thông qua http và https. Tôi thấy đánh giá bảo mật phàn nàn rằng base_urlkhông được xác định trong settings.php.

Tuy nhiên, khi tôi xác định nó là http://example.comvà xóa tất cả bộ đệm, mẫu của tôi trong https không được hiển thị.

Khi tôi nhận xét ra $base_urldòng trong settings.phpmọi thứ trở lại bình thường.

Làm thế nào tôi có thể giải quyết vấn đề này?


Tôi chỉ định hỏi câu hỏi này. Vấn đề là hầu hết các trình duyệt sẽ chặn nội dung không an toàn khi yêu cầu qua SSL. Vì vậy, nếu base_url của bạn là example.com nhưng sau đó bạn truy cập trang web qua example.com thì trình duyệt của bạn sẽ không tải các tệp chủ đề của bạn. Mô-đun "Trang bảo mật", drupal.org/project/securepages tôi tin rằng, cho phép bạn xác định một cơ sở an toàn và không bảo mật, mặc dù mô-đun đó hiện đang trong giai đoạn thử nghiệm.
Màn hình

FYI, chỉ thử nghiệm chứng khoán. Nó đặt một base_url an toàn và không bảo mật, nhưng base_url toàn cầu vẫn giữ cho các tài nguyên chủ đề. Vì vậy, không, không phải là một giải pháp.
Màn hình

Câu trả lời:


5

Bạn có thể cần phải làm một cái gì đó như thế này:

$protocol = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
$base_url = $protocol . '://mysite.com';

... Để Drupal biết nên sử dụng giao thức nào tùy thuộc vào cách trang web được truy cập.


3

Tôi đã có may mắn với:

$base_url = '//mysite.com';  

Ngoài ra, để duy trì cookie phiên, tôi thường thêm:

$conf['https'] = TRUE;

cho phép chế độ hỗn hợp.


Câu trả lời này là chính xác, nó nên được đánh dấu như vậy.
Rolando Isidoro

Đây là câu trả lời không chính xác vì nó làm cho tất cả url('path', array('absolute'=>TRUE));được hiển thị như //mysite.com/path. Bạn nên sử dụng phương pháp của @ colan chứ không phải phương pháp này.
zaporylie

Câu trả lời này cũng có thể phá vỡ đăng nhập trên chrome. Câu trả lời của @ colan là câu trả lời đúng.
jenlampton

2

Điều này hoạt động tốt với tôi với một số tên miền trên cùng cài đặt Drupal trên CloudFlare:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
  $base_url = $_SERVER["HTTP_X_FORWARDED_PROTO"] . '://' . $_SERVER['HTTP_HOST'];
} else {
  $base_url = 'http://' . $_SERVER['HTTP_HOST'];
}

Như thế này, nó cũng hoạt động tốt với SSL linh hoạt CloudFlare. Tôi có thể truy cập trang web cả có và không có SSL.

(Có vẻ như bạn không cần mô-đun Cloudflare nhưng cũng không kích hoạt nó.)


Nếu bạn chỉ sử dụng bất kỳ tiêu đề máy chủ nào được gửi, tôi không chắc chắn việc đặt $ base_url thậm chí có giá trị vào thời điểm này, bởi vì Drupal sẽ tự động phát hiện nó nếu bạn không chỉ định nó.
Brian

Welkom (terug) trong het Land van 1K ... hãy sử dụng các đặc quyền đi kèm với nó một cách khôn ngoan!
Pierre.Vriens

0

Thật không may, vấn đề với việc thiết lập giao thức liên quan đến URL được truy cập là trang web chỉ tham chiếu khi xây dựng các tệp được lưu trong bộ nhớ cache và do đó tạo ra tất cả các tham chiếu đến tệp và tài nguyên dựa trên giao thức nào được sử dụng khi xây dựng lại bộ đệm của trang.

Vì vậy, nếu bạn xây dựng lại bộ đệm từ https, thì tất cả các liên kết là https. Nếu bạn xây dựng lại trang web từ http, thì tất cả các liên kết là http.

Việc xây dựng lại từ https hoạt động tốt nhất, nhưng trình duyệt vẫn có thể chặn nội dung bảo mật và có thể yêu cầu người dùng cho phép thủ công nội dung bị chặn.

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.