You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 8 SVG图标混合内容问题求助:强制HTTPS加载图标

解决Drupal 8中SVG图标强制HTTPS加载的问题

我之前维护Drupal 8站点时也碰到过一模一样的问题——后台站点URL设成了HTTP,但生产环境要求全HTTPS,结果核心SVG图标总走HTTP加载。给你几个实用的解决办法,按优先级排序:

1. 修正站点基础URL(最推荐)

这是最根本的解决方式,Drupal生成所有资源链接的核心依据就是站点信息里的基础URL:

  • 登录站点后台,访问/admin/config/system/site-information页面
  • 把站点URL字段从http://www.example.com改成https://www.example.com
  • 保存设置后,务必清空Drupal缓存(可以通过后台/admin/config/development/performance页面操作,或者用Drush命令:drush cr)

改完之后,所有核心资源包括SVG图标都会自动用HTTPS加载了。

2. 通过settings.php强制HTTPS资源

如果暂时没法修改站点基础URL(比如有其他业务依赖HTTP配置),可以直接在配置文件里强制指定HTTPS:
打开sites/default/settings.php,添加以下代码:

// 强制站点基础URL为HTTPS
$GLOBALS['base_url'] = 'https://www.example.com';

// 可选:单独指定公共文件目录的HTTPS地址
$settings['file_public_base_url'] = 'https://www.example.com/sites/default/files';

保存文件后清空缓存,Drupal就会用这个HTTPS地址生成所有资源链接,包括核心SVG图标。

3. 用主题预处理钩子替换SVG URL

如果上面两种方法都不适用,还可以通过自定义主题的预处理钩子来批量替换SVG的HTTP链接为HTTPS:
在你的主题目录下的.theme文件(比如mytheme.theme)中添加以下代码:

/**
 * 预处理所有元素,替换SVG的HTTP链接为HTTPS
 */
function mytheme_preprocess(&$variables, $hook) {
  // 检查元素是否有src属性且是SVG文件
  if (isset($variables['attributes']['src']) && strpos($variables['attributes']['src'], '.svg') !== FALSE) {
    // 替换HTTP为HTTPS
    $variables['attributes']['src'] = str_replace('http://', 'https://', $variables['attributes']['src']);
  }
}

记得把mytheme替换成你实际使用的主题名称,保存后清空缓存即可生效。

注意事项

不管用哪种方法,清空Drupal缓存都是必须的——因为Drupal会缓存所有生成的资源链接,不清理的话新配置不会立即生效。

内容的提问来源于stack exchange,提问作者pirmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:21:16