使用LinkManager和languageEmbedding =“always”链接到Home

时间:2015-03-16 14:32:39

标签: c# sitecore sitecore7

我正在Sitecore 7.5中构建一个多语言网站,我希望始终在网址的开头显示该语言,例如mysite.com/en/article1.aspx

为实现这一目标,我使用LinkManager根据this博客修补了languageEmbedding="always"配置。现在,当通过Sitecore.Context.SetLanguage()更改语言时,URL会在跟踪链接时正确更改为相应的语言代码......到目前为止一切都很好!

当我尝试链接到home元素时出现问题,例如通过重定向:

var homeItem = Sitecore.Context.Database.GetItem(<GUID to home>);
var url = LinkManager.GetItemUrl(homeItem);
Redirect(url);

生成的网址为mysite.com/en.aspx,其中显示位于网站根文件夹中的名为Default.aspx的网页。当然,我希望它直接转到mysite.com/en/,它对应于给定语言中的主项,如果手动输入则有效。

在我看来,LinkManager有一个错误,因此在将语言嵌入到URL时无法正确解析主项。或者只是我犯了错误?

有人知道解决这个问题吗?如何让LinkManager添加尾部斜杠?

更新 以下是我的内容树的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

关于你得到的default.aspx。你可以通过在Application_Start()中的global.asax中添加一行来修复MVC。 System.Web.Routing.RouteTable.Routes.RouteExistingFiles = true;

protected void Application_Start()
{
  System.Web.Routing.RouteTable.Routes.RouteExistingFiles = true;
}

请参阅sitecore-and-the-error-pagejohn-west-sitecore-blog/posts/2012/11/conflicting-files-mvc-routes-and-item-paths-in-the-sitecore-aspnet-cms

我不会根据您的意愿更改您的网址,但这是默认行为。