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?

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]);
    }
}

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


-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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.