Как принудительно использовать URL-адреса изображений в качестве HTTPS?


Есть несколько мест, куда я звоню ImageStyle::load('style')->buildUrl($uri), чтобы получить физический путь к файлу изображения.

После включения HTTPS и принудительного использования всего трафика HTTPS я заметил, что это вернет http:// только в начале URL-адреса, а не https://, вызывая флаг смешанного режима в браузере.

Есть ли способ сделать это и получить правильный протокол? Могу ли я вместо этого просто получить относительный путь к файлу? Я заметил, что этот метод жестко закодирован 'absolute' => TRUE при построении URL-адрес для возврата.

Редактировать: поля, использующие обычный метод визуализации, т.е. {{ 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());
    }
  }
}

В режиме просмотра узла шаблон ветки:

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

2 answers

Вы можете использовать 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) {
 14
Author: 4k4, 2017-03-01 22:15:32

Вы можете попробовать изменить свой base_url, не комментируя следующую строку в settings.php и изменение http на https.

/**
 * 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';
 2
Author: No Sssweat, 2017-03-02 01:00:47