Episerver 5子页面url导出MVC

时间:2015-02-27 08:21:55

标签: asp.net asp.net-mvc redirect episerver

我正在尝试将特定页面子页面导出到某种列表中。这样做的目的是因为我正在更新一个位于episerver 5的新网站上的网站。该链接也应该更新。这意味着我想重定向所有当前子网页以转到新的父网站链接。而且我不想使用catch,因为如果子页面不存在我想显示404页面。

实施例: 父页面,当前网页: http://localhost/newssection/

父网页,新网页: http://localhost/news/

当前网站上的所有子网页都应将301重定向到新网页的父网页。 子页面示例: http://localhost/newssection/what-is-going-on/应将301重定向到http://localhost/news/,依此类推......

我想构建一个脚本,生成所有这些重定向,并重写我选择的所有父页面。我怎样才能以最佳方式实现这一目标?

提前致谢, 麦克

2 个答案:

答案 0 :(得分:0)

显然,实现这一目标的方式几乎无穷无尽,但有两个可行的选择:

1)在IIS中使用重写规则(如果您可以使用通用模式或具有有限数量的重定向)

2)创建自定义重定向,可能作为页面控制器基类的HTTP模块或动作过滤器,并重定向到每页上设置的URL

对于选项2),您可能会在基页类型上添加一个名为“LegacyUrl”的新属性。它将用于指定新页面正在替换的旧URL。

对于产生404的每个页面请求,在旧版网址中查找网址,并使用“永久移动”状态代码重定向。

答案 1 :(得分:0)

我会创建一个简单的页面并执行以下操作:

var children = DataFactory.Instance.GetChildren(new PageReference(IdToParentPage));
foreach (var child in children) {
Response.WriteLine(child.URLSegment); // this is only the segment for the page, not the full URL
}

然后在web.config中创建重写规则,或者将其添加到某些404模块(如果有的话)。

如果您需要完整的网址,可以使用以下代码获取:

EPiServer.UrlBuilder url = new EPiServer.UrlBuilder(child.LinkURL);
EPiServer.Global.UrlRewriteProvider.ConvertToExternal(url, child.PageLink, System.Text.UTF8Encoding.UTF8);