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

Sitecore部分图片路径额外追加/sitecore/shell前缀的原因是什么?

Sitecore媒体URL额外追加/sitecore/shell前缀的原因

这个问题是Sitecore媒体URL生成逻辑的默认机制导致的,具体触发原因如下:

  • 上下文站点配置不匹配
    MediaManager.GetMediaUrl()方法默认会读取当前请求绑定的站点配置生成路径。当代码运行在Sitecore后台上下文(比如内容编辑器操作、自定义后台功能、未指定站点的定时任务/事件处理器中),默认绑定的是shell站点,该站点的配置规则会自动给媒体URL添加/sitecore/shell前缀。
  • 媒体项归属站点未显式指定
    如果你的媒体项归属于前端站点的媒体库,但生成URL时没有显式指定前端站点上下文,方法会沿用当前的shell站点规则生成路径,就会出现多余前缀。
  • 调用方法时未传入自定义配置
    你当前的调用逻辑没有传入MediaUrlOptions参数指定生成规则,方法会完全采用上下文的默认配置,无法覆盖shell站点的前缀规则。
修复方案

你可以通过显式指定站点上下文的方式避免该问题,示例代码如下:

// 初始化自定义媒体URL配置,指定前端站点
var mediaUrlOptions = new MediaUrlOptions
{
    AlwaysIncludeServerUrl = false,
    // 替换为你项目中实际的前端站点名称
    Site = Sitecore.Sites.SiteContext.GetSite("frontSite"),
    DisableBrowserCaching = false
};

// 生成带哈希保护的媒体路径
var mediaUrl = Sitecore.StringUtil.EnsurePrefix('/',
    HashingUtils.ProtectAssetUrl(MediaManager.GetMediaUrl(imgMediaItem, mediaUrlOptions)));

如果你的代码运行在非web请求上下文(比如定时任务、事件回调),可以先切换站点上下文再执行URL生成逻辑:

// 切换到前端站点上下文
using (new Sitecore.Sites.SiteContextSwitcher(Sitecore.Sites.SiteContext.GetSite("frontSite")))
{
    // 在此处执行媒体URL生成逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:00