我在Sitecore 7中有以下树结构
Content
Site 1
page 1
Site 2
page 1
Media Library
Site 1 media files
pdf
1.pdf
Site 2 media files
pdf
1.pdf
媒体库是一个共享库,看起来用户可以访问来自站点1的站点2媒体文件和来自站点2的站点1媒体文件,我可以停止此行为吗?
我想如果我从网站1页面引用网站2文件,生成的链接应该从网站2域打开它们。
例如当前如果我正在浏览站点1的第1页并且链接到站点2的1.pdf,则会生成以下链接
的http:// 站点1 /~media/site2/pdf/1.pdf
链接正常工作但站点1域正在提供站点2文件 我想文件的url应该如下
的http:// 站点2 /~media/site2/pdf/1.pdf
节点:我有一个自定义链接提供程序,对于网站上的页面非常有效。
答案 0 :(得分:0)
您可以创建自定义媒体提供程序并注册它而不是默认的:
<mediaLibrary>
<mediaProvider type="My.Assembly.Namespace.CustomMediaProvider, My.Assembly" />
</mediaLibrary>
public class CustomMediaProvider : MediaProvider
{
public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
{
string mediaUrl = base.GetMediaUrl(item, options);
if (mediaUrl == null || mediaUrl.StartsWith("http"))
{
return mediaUrl;
}
string[] parts = mediaUrl.Split(new[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length > 2)
{
// skip "~" and "media" parts
string mediaLibraryTopFolder = parts[2];
// assuming that folder names are site1 and site2
SiteInfo siteInfo = SiteContextFactory.GetSiteInfo(mediaLibraryTopFolder);
if (siteInfo != null)
{
SiteContext siteContext = new SiteContext(siteInfo);
// change logic if you need https
mediaUrl = "http://" + siteContext.HostName + "/" + mediaUrl.TrimStart('/');
}
}
return mediaUrl;
}
}
此代码未经过测试,但如果媒体项链接尚未包含主机名,则应从媒体路径获取顶级文件夹,获取与文件夹名称相同的站点,并在路径的开头。
请注意,这会更改您的所有媒体链接,因此它们将包含http
和主机名,并且这仅适用于MediaManager
或MediaProvider
生成的链接。