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
相关产品推荐
相关产品推荐

