web-dev-qa-db-ja.com

画像のURLをHTTPSとして強制する方法は?

画像の物理ファイルパスを取得するためにImageStyle::load('style')->buildUrl($uri)を呼び出す場所がいくつかあります。

HTTPSを有効にしてすべてのトラフィックでHTTPSを使用するように強制すると、URLの先頭でhttp://のみが返され、ブラウザでhttps://が混合モードフラグを引き起こさないことに気付きました。

これを実行して正しいプロトコルを取得する方法はありますか?代わりに、ファイルへの相対パスを取得することはできませんか?返すURLを作成するときに、このメソッドが'absolute' => TRUEをハードコーディングしていることに気づきました。

編集:通常のレンダリング方法を使用するフィールド、つまり{{ content.field_image }}は正しいプロトコルであり、問​​題を引き起こしません。

変数の生成に使用しているコードは次のとおりです。

/**
 * Implements hook_preprocess_node().
 * @param $variables
 */
function mytheme_preprocess_node(&$variables) {
  $node = $variables['elements']['#node'];
  $bundle = $node->bundle();

  if ($bundle =='homepage' && $variables['elements']['#view_mode'] == 'hero') {
    $hero_image = $node->get('field_hero_image')->getValue();

    if (!empty($hero_image)) {
      $entity = Media::load($hero_image[0]['target_id']);
      $variables['hero_image'] = ImageStyle::load('homepage_hero')->buildUrl($entity->field_image->entity->getFileUri());
    }
  }
}

ノードビューモードでtwigテンプレート:

  {% if node.field_hero_image is not empty %}
    <div class="hero__graphic" style="background-image: url({{ hero_image }});"></div>
  {% endif %}
3
Kevin

file_url_transform_relative()を使用できます:

/**
 * Transforms an absolute URL of a local file to a relative URL.
 *
 * May be useful to prevent problems on multisite set-ups and prevent mixed
 * content errors when using HTTPS + HTTP.
 *
 * @param string $file_url
 *   A file URL of a local file as generated by file_create_url().
 *
 * @return string
 *   If the file URL indeed pointed to a local file and was indeed absolute,
 *   then the transformed, relative URL to the local file. Otherwise: the
 *   original value of $file_url.
 *
 * @see file_create_url()
 */
function file_url_transform_relative($file_url) {
10
4k4

Settings.phpの次の行のコメントを外して、httpをhttpsに変更することで、base_urlを変更してみることができます。

/**
 * Public file base URL:
 *
 * An alternative base URL to be used for serving public files. This must
 * include any leading directory path.
 *
 * A different value from the domain used by Drupal to be used for accessing
 * public files. This can be used for a simple CDN integration, or to improve
 * security by serving user-uploaded files from a different domain or subdomain
 * pointing to the same server. Do not include a trailing slash.
 */
# $settings['file_public_base_url'] = 'http://downloads.example.com/files';
1
No Sssweat