Howto: Drupal mit und ohne ssl bei all-inkl
am 09.01.2010 - 21:08 Uhr in
Ich hab mich länger damit rumgeärgert,
bin endlich auf die Lösung gekommen
und möchte sie der Community nicht vorenthalten.
Problem:
Bei all-inkl laufen die ssl-Seiten über https://ssl-account.com/domain.de
Da Drupal alle Dateien absolut verlinkt ( /folder/file.name ),
versucht der Browser jetzt https://ssl-account.com/folder/file.name
was natürlich nicht existiert.
Mehrere $_SERVER-Variablen haben nicht funktioniert,
dank eines Tutorials von all-inkl (http://all-inkl.com/index.php?sek=anleitungen&a=skripte&b=xtcommerce-ssl)
zu xt commerce, kam ich jetzt noch auf die Idee, HTTP_X_FORWARDED_HOST auszuprobieren,
was endlich funktioniert.
Und so geht's:
1.
In der sites/xy/settings.php die Zeile
<?php
# $base_url = 'http://www.example.com'; // NO trailing slash!
?>
ersetzen durch
<?php
if($_SERVER['HTTP_X_FORWARDED_HOST'] == 'ssl-account.com') {
$base_url = 'https://ssl-account.com/domain.de'; // NO trailing slash!
$_SERVER['HTTP_HOST'] = 'ssl-account.com';
}
?>
2.
Bei Formularen zeigt das action-Attribut immer noch nach / und nicht nach /domain.de
Das scheint ein Fehler in Drupal selbst zu sein.
Um ihn zu beheben, muss man den Core hacken:
in der includes/form.inc.php die Funktion
theme_form suchen (in drupal 6.15 ab Zeile 2067).
Die komplette Funktion erstzen durch
<?php
function theme_form($element) {
$action = substr(base_path(), 0, strlen(base_path())-1);// add base path
$action = $element['#action'] ? 'action="'. $action . check_url($element['#action']) .'" ' : '';
$action = str_replace('/'.$_SERVER['SERVER_NAME'].'/'.$_SERVER['SERVER_NAME'], '/'.$_SERVER['SERVER_NAME'], $action);// in some case, the base path now appears twice. Remove it!
// Anonymous div to satisfy XHTML compliance.
return '<form '. $action .' accept-charset="UTF-8" method="'. $element['#method'] .'" id="'. $element['#id'] .'"'. drupal_attributes($element['#attributes']) .">\n<div>". $element['#children'] ."\n</div></form>\n";
}
?>
ersetzen.
Auf diese Weise funktioniert die Seite jetzt unter www.domain.de und unter https://ssl-account.com/domain.de
- Anmelden oder Registrieren um Kommentare zu schreiben
Danke
am 27.12.2011 - 22:53 Uhr
Ich muss diesen Beitrag nochmals hervorholen und mich ausrücklich dafür bedanken, da er mich nach Stunden des recherchierens endlich ein gutes Stück weitergebracht hat.
Im Großen und ganzen funktioniert diese Lösung recht gut. Jedoch habe ich noch zwei Probleme:
1. Unter der regulären Adresse (http) bekomme ich folgende Meldung angezeigt
"Notice: Undefined index: HTTP_X_FORWARDED_HOST in include_once() (line 249 of /www/htdocs/xyz/test/sites/default/settings.php).". Unter https erscheint diese Meldung hingegen nicht (funktioniert einwandfrei).
2. Ich versuche das Modul SecurePages zu verwenden. Das Zertifikat bzw. die obigen Einstellungen scheint dieses Modul jedoch nicht zu erkennen ("To start using secure pages this setting must be enabled. This setting will only be able to changed when the web server has been configured for SSL.
If this test has failed then go here"). Es lässt sich nicht aktivieren.
Vielen Dank im Voraus für Tipps!