我在 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 媒体文件和站点 1 媒体文件从站点 2,我可以停止此行为吗?
我希望如果我从站点 2 页面引用站点 1 文件,生成的链接应从站点 2 域打开它们。
例如,当前如果我正在浏览站点 1 的第 1 页,并且该页面链接到站点 1.pdf站点 2,则会生成以下链接
http://site1/~media/site2/pdf/1.pdf
链接工作正常,但站点 2 文件由站点 1 域提供服务我希望文件的网址应该如下
http://site2/~media/site2/pdf/1.pdf
节点:I有一个自定义链接提供程序,它非常适合跨站点的页面。
您可以创建自定义媒体提供程序并注册它,而不是默认媒体提供程序:
<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
生成的链接。