base_url untuk http dan https?

7

Saya memiliki situs yang dapat diakses melalui http dan https. Saya melihat ulasan keamanan mengeluh yang base_urltidak didefinisikan dalam settings.php.

Namun ketika saya mendefinisikannya sebagai http://example.com, dan flush semua cache, template saya di https tidak di-render.

Ketika saya mengomentari $base_urlbaris dalam settings.phpsemuanya kembali normal.

Bagaimana saya bisa menyelesaikan masalah ini?

Lakukanlah
sumber
Saya hanya akan menanyakan pertanyaan ini. Masalahnya adalah sebagian besar browser akan memblokir konten yang tidak aman saat meminta melalui SSL. Jadi jika base_url Anda adalah example.com tetapi Anda kemudian mengakses situs melalui example.com browser Anda tidak akan memuat file tema Anda. Modul "Halaman Aman", drupal.org/project/securepages Saya percaya, memungkinkan Anda menentukan base_url yang aman dan tidak aman, meskipun modul itu saat ini dalam versi beta.
Screenack
FYI, baru saja menguji keamanan. Ini menetapkan base_url yang aman dan tidak aman, tetapi base_url global masih berlaku untuk sumber daya tema. Jadi, tidak, bukan solusi.
Screenack

Jawaban:

5

Anda mungkin perlu melakukan sesuatu seperti ini:

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

... sehingga Drupal tahu protokol mana yang digunakan tergantung pada bagaimana situs itu diakses.

colan
sumber
3

Saya beruntung dengan:

$base_url = '//mysite.com';  

Juga, untuk menjaga cookie sesi, saya biasanya menambahkan:

$conf['https'] = TRUE;

yang memungkinkan untuk mode campuran.

DaveD - BackOffice Thinking
sumber
Jawaban ini benar, harus ditandai seperti itu.
Rolando Isidoro
Ini adalah jawaban yang salah karena membuat semua url('path', array('absolute'=>TRUE));diterjemahkan sebagai //mysite.com/path. Anda harus menggunakan pendekatan @ colan daripada yang ini.
zaporylie
Jawaban ini juga dapat memecah login di chrome. Jawaban @ colan adalah jawaban yang benar.
jenlampton
2

Ini berfungsi baik untuk saya dengan beberapa domain pada pemasangan Drupal yang sama melalui 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'];
}

Seperti ini juga berfungsi baik dengan CloudFlare SSL fleksibel. Saya dapat mengakses situs dengan dan tanpa SSL.

(Sepertinya Anda tidak memerlukan modul Cloudflare tetapi tidak ada salahnya untuk mengaktifkannya.)

kqw
sumber
Jika Anda hanya akan menggunakan header host apa pun yang dikirim, saya tidak yakin menetapkan $ base_url bahkan sepadan pada saat ini, karena Drupal akan secara otomatis mendeteksinya jika Anda tidak menentukannya.
Brian
Welkom (terug) di het land van 1K ... gunakan hak istimewa yang diberikan dengan bijak!
Pierre.Vriens
0

Sayangnya masalah dengan pengaturan protokol relatif terhadap URL yang diakses adalah bahwa situs hanya mereferensikan ketika membangun file yang di-cache dan karenanya membuat semua referensi ke file dan sumber daya berdasarkan protokol apa yang digunakan saat membangun kembali cache situs.

Jadi, jika Anda membuat ulang cache dari https, maka semua tautan adalah https. Jika Anda membangun kembali situs dari http, maka semua tautan adalah http.

Membangun kembali dari https berfungsi dengan baik, tetapi browser mungkin masih memblokir konten yang aman dan mungkin mengharuskan pengguna untuk secara manual mengizinkan konten yang diblokir.

Michael Myers
sumber