Wie kann Drupal dazu gebracht werden, mit wurzelbezogenen Pfaden zu dienen?

7

Ich versuche zu vermeiden, Seiten bereitzustellen, die CSS- und JS-Ressourcen über URLs laden, die entweder http oder https angeben. (Ich versuche, eine Problemumgehung für das in dieser Frage beschriebene Problem zu finden , falls keine echte Lösung gefunden werden kann.)

Da Drupal http: // für die href für alle CSS- und JS-Dateien angibt , scheint der Browser alle diese Dateien zu ignorieren , wenn der Server fälschlicherweise zu https wechselt, wie in der oben genannten Frage beschrieben , und ich erhalte eine nicht gestaltete Seite .

Anstatt

<link type="text/css" rel="stylesheet" href="http://www.example.com/sites/default/files/css/css_pbm0lsQQJ7A7WCCIMgxLho6mI_kBNgznNUWmTWcnfoE.css" media="all" />

(usw.)

Ich würde gerne dienen

<link type="text/css" rel="stylesheet" href="/sites/default/files/css/css_pbm0lsQQJ7A7WCCIMgxLho6mI_kBNgznNUWmTWcnfoE.css" media="all" />

oder auch

<link type="text/css" rel="stylesheet" href="//www.example.com/sites/default/files/css/css_pbm0lsQQJ7A7WCCIMgxLho6mI_kBNgznNUWmTWcnfoE.css" media="all" />

Kann ich Drupal dazu bringen, URLs bereitzustellen, die kein Protokoll angeben?

Bilderstürmer
quelle

Antworten:

10

Sie können einen Vorlagenprozess-Hook (YOUR_THEME_process_html) verwenden, um alle Ressourcen-URLs (js und css) mithilfe eines regulären Ausdrucks neu zu schreiben.

Hier ist ein Beispiel, das alle http://oder https://in Folgendes umwandelt //:

function YOUR_THEME_process_html(&$vars)
{
    foreach (array('head', 'styles', 'scripts') as $replace) {
        if (!isset($vars[$replace])) {
            continue;
        }

        $vars[$replace] = preg_replace('/(src|href|@import )(url\(|=)(")http(s?):/', '$1$2$3', $vars[$replace]);
    }
}
Mike Vranckx
quelle
Das hat für mich wie ein Zauber gewirkt. Auch wir stehen hinter einem F5-Server und verwenden ihn, um sicherzustellen, dass alle Anforderungen über https ausgeführt werden.
user5013
Dies hat bei mir funktioniert, leider scheint es keine Auswirkungen auf IMG-Tags zu haben (sogar das Hinzufügen von IMG zum Array), sodass ich immer noch Probleme damit habe. Es ist seltsam, dass Drupal alle Ressourcen über HTTP lädt, auch wenn es sich um HTTPS handelt.
nbsp
imgsind nicht Teil der $varsVariablen, die von der übergeben werden YOUR_THEME_process_html. Die Bilder, die Sie versuchen, ändern die Quell-URL. Sind sie Teil des Inhalts?
Mike Vranckx
Lief wie am Schnürchen! Wenn Sie sich fragen, wie Sie diese Konvertierung auf Links im Seiteninhalt anwenden können, fügen Sie 'page'sie dem Array in der foreachSchleife hinzu.
Coredumperror
2

Dies wurde in Drupal 8 behoben. In Drupal 7 gibt es ein Problem beim Beheben .

Liam Morland
quelle
-1

Wir hatten das gleiche Problem mit einer Website, die wir entwickelten, und konnten keine Lösung finden, warum einige der Pfade https und andere http sein würden. Die Problemumgehung, die Ihnen möglicherweise nicht gefällt, bestand darin, das Pathologic- Modul zu verwenden, das alles von absolut zu relativ umwandelt, sodass Ihre Formulare anstelle von http://www.whatever.com/ einen / path-to-form verwenden. Weg zur Form .

chadpeppers
quelle
3
Da pathologisch ein Eingabefilter ist, wirkt sich AFAIK nur auf den Inhalt aus, nicht auf die von Drupal generierten URLs. Ich sehe also auch hier nicht, wie das helfen kann.
Bilderstürmer