如何配置Sitecore以便生成媒体项的绝对链接?

时间:2011-05-12 12:16:08

标签: performance url sitecore pagespeed

<sc:Image><sc:FieldRenderer>,在渲染MediaItem时,会生成如下所示的html代码:

<img src="~/media/twitter.gif" alt="Twitter" width="100" height="22" />

注意src属性中使用的相对路径:这意味着当这样的图像在多个页面上重用时,浏览器必须多次获取它(例如,在页面http://example.com/和{{3 }})。当我在代码中生成img标记时,我可以使用以下代码段强制使用绝对网址:

string url = Sitecore.StringUtil.EnsurePrefix('/',
    Sitecore.Resources.Media.MediaManager.GetMediaUrl(media));

如何配置Sitecore以强制媒体网址中的前导斜杠?

使用Reflector我可以看到MediaOptions.AbsolutePath控制了我想要实现的行为,但我不知道如何为Sitecore内置控件设置它。在Media.MediaLinkPrefix中设置mediaPrefixesweb.config似乎没有任何改变。

3 个答案:

答案 0 :(得分:8)

我参与了一个项目,我们将媒体资产存储在Akamai的CDN上,因此我们不得不改变媒体网址的解析方式。

我们通过更改LinkProvider来修改内置ExpandDynamicLinks()课程。我们还调整了Sitecore.Resources.Media.MediaProvider并更新了GetMediaUrl()方法。

这些是处理由字段渲染器生成的图像的链接以及在富文本编辑器中创建的链接。

答案 1 :(得分:3)

有一个更简单的解决方案。我的语法可能有点偏差 - 请随意纠正我,我会进行编辑。

MediaManager.GetItemUrl(item, new MediaUrlOptions { AbsolutePath = true });

答案 2 :(得分:0)

Create a Link to Sitecore Media Item

您将无法使用上述LinkManager.GetItemUrl()方法获取媒体项。 Sitecore有一个单独的API来获取媒体网址。

public string ResolveSitecoreMediaURL(Sitecore.Data.Items.Item item)
{
   MediaUrlOptions mediaOptions= new MediaUrlOptions();
   mediaOptions.AlwaysIncludeServerUrl = true;
   mediaOptions.AbsolutePath =true;
   return Sitecore.Resources.Media.MediaManager.GetMediaUrl(item,mediaOptions);
}

与LinkManager一样,URLOptions MediaManager附带一个MediaUrlOptions,您可以在其中控制绝对和相对URL。