Unter „scheme relative URLs“ oder zu Deutsch relativen URLs versteht man Internetadressen, bei denen das führende Protkoll (z.B. http:
oder auch https:
) weggelassen wird. Dies ist beispielsweise dann von Vorteil, wenn Webseiten sowohl unverschlüsselt (http:
) als auch verschlüsselt (https:
) verfügbar sind. Das Prinzip ist in RFC 3986 von 2005 erläutert: http://tools.ietf.org/html/rfc3986#section-4.2
BlackCat CMS verwendet seit Version 1.0.3 standardmäßig eine relative URL und trägt diese in die Datei config.php
ein, wenn diese Version erstinstalliert wird. Bei einem Update von vorherigen Versionen bleibt der vorherige Eintrag unverändert.
Eingeführt wurde diese Änderung, um die Möglichkeit zu haben, das Backend über eine verschlüsselte Verbindung (https:
) aufzurufen. In diesem Fall müßte das CMS ansonsten sämtliche URLs, die im Backend verwendet werden (Links, Bilder, CSS-Dateien, JavaScripts, …), filtern und anpassen, je nachdem, ob der Aufruf per HTTP oder per HTTPS erfolgt ist.
In der Folge können jedoch Probleme mit älteren oder nicht entsprechend gestalteten Modulen auftreten. Siehe https://github.com/webbird/BlackCatCMS/issues/252
Das betrifft aktuell z.B. das kitFramework und die dortigen Erweiterungen imageTweak, FacebookGallery oder KeepInTouch.
Abhilfe:
Hier existieren im Grunde 3 Möglichkeiten, von denen jedoch nur zwei durch den Nutzer selbst angewendet werden können.
curl()
, Prüfung und ggfs. Ergänzung der ermittelten URL, o.ä.)config.php
; inkompatibel mit dem HTTPS-Patchwb2compat.php
, sofern nur Module betroffen sind, die mit der Konstanten WB_URL
arbeitenAnpassung config.php
Hier ist folgende Zeile zu ergänzen:
define('CAT_URL', '//<Server>/<Pfad>');
(Wobei <Server>
und <Pfad>
hier natürlich Platzhalter für die echten Werte in der jeweiligen BlackCat-Installation sind.)
Anpassung wb2compat.php
Die Datei wb2compat.php
(im Verzeichnis ./framework
) setzt alle Konstanten, die WB-Module benötigen, und erledigt einige andere Aktionen, die notwendig sind, um kompatibel zu WB zu sein. Hier findet sich folgende Zeile:
define('WB_URL', CAT_URL);
Diese kann bei Bedarf folgendermaßen geändert (im Sinne von ersetzt) werden:
$rel_parsed = parse_url(CAT_URL); if(!array_key_exists('scheme',$rel_parsed ) || $rel_parsed['scheme']=='') define('WB_URL', (isset($_SERVER['HTTPS']) ? 'https:' : 'http:') . CAT_URL); else define('WB_URL', CAT_URL);