Mobile Domain und HTTPS bändigen

Die Lösung für HTTPS ist einfach ...

Um auf einer Webseite gewisse Seiten (z. B. Formulare mit Benutzerdaten) per HTTPS zusätzlich abzusichern, hat sich das Modul Secure Pages bewährt. Damit lässt sich einfach eine Domain einrichten, die für die sichere Verbindung angesteuert wird (die entsprechende Serverkonfiguration vorausgesetzt). Mit weiteren Einstellungen lässt sich dann das Umstellen auf einzelnen Seiten einrichten.

... und auch für eine Mobile Domain, ...

Um die Webseite für Mobilgeräte mit einem anderen angepassten Layout/Theme anuzeigen bietet sich dagegen das Modul Mobile Tools an. Auch hier lässt sich eine Domain einstellen, in diesem Falle natürlich die für die mobile Variante vorgesehene.

... nur zusammen wollen sie nicht so recht!

Will man nun aber beide Vorzüge genießen, ist das ohne weiteres nicht so möglich, denn dafür müssten wir auch die mobile HTTPS Domain berücksichtigen. Das wird erst recht schwierig wenn man zusätzlich auch noch GlobalRedirect aktiviert hat.

So passiert es nämlich dann gelegentlich, dass man von der Desktop-Seite auf die mobile Seite weitergeleitet wird, dort aber eventuell die (eine) sichere Seite benötigt würde, und wir so von SecurePages wieder auf die https-Desktop-Seite geleitet werden. Da wir uns jedoch auf einem Mobilgerät befinden, will uns MobileTools wieder auf die mobile Variante schicken. So geht dass eine Weile, bis der Server eine Fehlermeldung ausspuckt: Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.. Die Einstellungen führten zu einem Zirkelbezug in den Weiterleitungen.

Im Beispielfall von http://www.example.com hätten wir mit https://www.example.com die eigentliche HTTPS-Seite. Sobald wir die mobile Seite http://m.example.com eingerichtet haben, bräuchten wir im Regelfall aber auch deren https-Pendant https://m.example.com. Diese Einstellungsmöglichkeit bietet uns Mobile Tools oder SecurePages aber nicht - zumindest nicht über die UI.

Wir brauchen einen Vermittler!

Und diesen Vermittler finden wir in der settings.php. Den solange die Konfigurationsvariablen nicht in der Datenbank (genauer der Tabelle {variable}) gespeichert sind, können wir diese mit Leichtigkeit in der settings.php setzen.

Um das Sichern der Werte in der Datenbank zu verhindern habe ich ein kleines Sandbox-Modul unter auf http://drupal.org/sandbox/derhasi/1399172 veröffentlicht (aktuell nur für Drupal 6), dass beim Speichern der Mobile Tools und SecurePages Konfigurationsseiten, die entsprechenden URL-Einstellungen wieder aus der variable-Tabelle löscht.

Aber nun zur Konfiguration der settings.php, damit die oben genannten Einstellungen umgesetzt werden können, und der Zirkelbezug dadurch nicht mehr erzeugt wird:

$desktop_url = 'www.example.com';

$mobile_url = 'm.example.com';

 

$secure = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on');

 

// In mobilen Anfragen wird die HTTPS Seite auf das mobile Pendant gestellt.

// Die base_url wird in beiden Fällen angepasst um ungewollte Redirects durch

// andere Module zu verhindern (z. B. globalredirect).

if ($_SERVER['HTTP_HOST'] == $mobile_url) {

  $conf['securepages_basepath'] = "http://$mobile_url";

  $conf['securepages_basepath_ssl'] = "https://$mobile_url";

  $base_url = ($secure) ? "https://$mobile_url" : "http://$mobile_url";

}

else {

  $conf['securepages_basepath'] = "http://$desktop_url";

  $conf['securepages_basepath_ssl'] = "https://$desktop_url";

  $base_url = ($secure) ? "https://$desktop_url" : "http://$desktop_url";

}

 

// Auf sicheren Seiten sind Mobil- und Desktopversion auch https-URLs.

if ($secure) {

  $conf['mobile_tools_mobile_url'] = "https://$mobile_url";

  $conf['mobile_tools_desktop_url'] = "https://$desktop_url";

}

else {

  $conf['mobile_tools_mobile_url'] = "http://$mobile_url";

  $conf['mobile_tools_desktop_url'] = "http://$desktop_url";

}

Mit dieser Konfiguration wird nun sichergestellt, dass bei jeder Anfrage die SecurePages- und MobileTools-Konfiguration auf den aktuellen Umstand (HTTPS oder mobil oder beides) angepasst ist.

Das Snippet findet sich auch als default.settings.inc im Repository.

Weiterer Hinweis

Zusätzlich zur MobileTools- und SecurePages-Konfiguration sollte man auch noch manuell angelegte Redirects und Rewrites berücksichtigen. Lässt man zum Beispiel die .htaccess stets www.example.com auf example.com umleiten, führt dies mit der obigen MobileTools- oder SecurePages-Konfiguration auch schnell zum Zirkellauf.