Drupal 10.1.1随机Symfony异常:主题需作为查询参数传入
Drupal 9.x升级到10.1.1后CSS请求BadRequestHttpException问题解决
问题核心
升级后仅在编辑内容并清理所有缓存时出现日志异常:
Symfony\Component\HttpKernel\Exception\BadRequestHttpException: The theme must be passed as a query argument in Drupal\system\Controller\AssetControllerBase->deliver()(位于/home/humming7/hhc10/web/core/modules/system/src/Controller/AssetControllerBase.php第127行)
对应请求的CSS文件随机存在/不存在,无固定来源页。
可能原因
- 旧缓存残留:缓存清理后,浏览器、CDN或反向代理仍保留了无
theme查询参数的旧CSS聚合URL,请求失效的旧URL触发错误。 - 自定义代码缺陷:自定义模块/主题中生成CSS链接的逻辑未正确传递
theme参数,缓存重建时生成了不合法的资产URL。 - 缓存重建竞态:缓存清理后,CSS聚合进程尚未生成完整的带主题参数的新文件,此时用户请求就会触发异常。
解决方案
1. 清除前端与CDN缓存
- 强制刷新浏览器缓存(快捷键
Ctrl+Shift+R),覆盖旧的CSS链接; - 若使用CDN或反向代理,手动刷新其缓存,确保旧的无参数URL被清除。
2. 排查自定义资产生成逻辑
- 检查自定义模块、主题中涉及CSS加载的代码(比如
drupal_add_css、AssetResolver服务调用); - 确保生成CSS URL时严格传递当前主题参数,例如调用
AssetResolverInterface::getCssAssets时传入正确的主题对象。
3. 缓存清理后预热资产
- 缓存重建后,自动触发关键页面的访问,提前生成聚合CSS文件。可通过Drush命令实现:
drush cache-rebuild && drush wget https://www.hummingbirdhealingcenter.org -q - 也可借助缓存预热类模块实现自动化操作。
4. 临时禁用CSS聚合(应急方案)
- 进入后台
配置 -> 性能,暂时关闭"聚合CSS文件"选项,避免用户请求触发错误,待根源问题解决后再重新开启。
内容的提问来源于stack exchange,提问作者Jim D
相关产品推荐
相关产品推荐

