Drupalをルート相対パスで提供するにはどうすればよいですか?


7

httpまたはhttpsを指定するURLを介してCSSおよびJSリソースをロードするページを提供しないようにしています。(実際の解決策が見つからない場合に備えて、この質問説明されいる問題の回避策を見つけようとしています。)

DrupalはすべてのCSSおよびJSファイルのhrefにhttp://を指定しているため、サーバーが誤ってhttpsに切り替わると、前述の質問説明されているように、ブラウザーがこれらのファイルをすべて無視しているように見え、スタイルのないページが表示されます。

の代わりに

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

(等。)

奉仕したい

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

あるいは

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

プロトコルを指定しないURLをDrupalに提供させることはできますか?

回答:


10

テンプレートプロセス(YOUR_THEME_process_html)フックを使用して、正規表現を使用してすべてのリソースURL(jsおよびcss)を書き換えることができます。

以下は、すべてhttp://またはhttps://に変換する例//です。

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

これは私にとって魅力のように働きました。私たちもF5サーバーの背後にいて、それを使用してすべてのリクエストがhttps経由で行われることを確認しています。
user5013 14

これは私にとってはうまくいきましたが、残念ながらimgタグには影響を与えないようです(imgを配列に追加した場合でも)ので、まだ問題が発生しています。HTTPSの場合でも、DrupalがすべてのリソースをHTTP経由でロードするのは奇妙です。
nbsp 2015

img$varsから渡される変数の一部ではありませんYOUR_THEME_process_html。あなたが試している画像はソースURLを変更します、それらはコンテンツの一部ですか?
Mike Vranckx、2015

魅力のように働いた!この変換をページコンテンツのリンクに適用する方法を知りたい場合'page'は、foreachループの配列に追加してください。
coredumperror


-1

私たちが開発しているWebサイトでも同じ問題があり、一部のパスがhttpsで、他のパスがhttpである理由を解決できませんでした。あなたが答えを好まないかもしれない回避策は、あなたのフォームがhttp://www.whatever.com/の代わりに/ path-to-formを使用するように絶対から相対にすべてを変えるPathologicモジュールを使うことでしたフォームへのパス


3
pathologicは入力フィルターであるため、AFAIKはコンテンツにのみ影響し、Drupalが生成するURLには影響しません。したがって、これがどのようにここで役立つかはわかりません。
iconoclast 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.