2015-03-16 1 views
0

Я создаю многоязычный веб-сайт в Sitecore 7.5, и я хочу всегда показывать язык в начале URL-адреса, например. mysite.com/en/article1.aspx.Ссылка на домашнюю страницу с LinkManager и languageEmbedding = "always"

Для этого я установил конфигурацию LinkManager в соответствии с блоком this с languageEmbedding="always". Теперь, при смене языка через Sitecore.Context.SetLanguage(), URL-адрес правильно изменяется на соответствующий код языка при следующих ссылках, как это происходит ... Пока все хорошо!

Проблема возникает, когда я пытаюсь сделать ссылку на главную элемент, например, через редирект, как например:

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

Полученный URL является mysite.com/en.aspx, который показывает страницу с именем Default.aspx находится в веб-корневой папке. Конечно, я хочу, чтобы вместо этого он направил mysite.com/en/, что соответствует домашнему элементу на данном языке и работает, если введено вручную.

Мне кажется, что у LinkManager есть ошибка, поэтому он не может правильно разрешить домашний элемент при встраивании языка в URL-адрес. Или это только я сделал ошибку?

Кто-нибудь знает, как исправить эту проблему? Как мне получить LinkManager, чтобы добавить конечную косую черту?

UPDATE Вот скриншот моего содержания дерева:

enter image description here

+0

Если вы исправили URL-адрес, как описано в этом сообщении в блоге, вы не должны * получать расширение .aspx на своих ссылках. Звучит для меня, как ваш патч не работает. Если вы посмотрите на свой последний файл web.config, вы можете увидеть ваши исправленные значения? – timothyclifford

+0

Можете ли вы подробно рассказать о том, как структурирован ваш контент? – timothyclifford

+0

Вы пробовали настройку addAspxExtension = "false"? –

ответ

0

О default.aspx вы получите. Это возможно для MVC, которую вы можете исправить, добавив строку в global.asax в Application_Start() a System.Web.Routing.RouteTable.Routes.RouteExistingFiles = true;

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

См sitecore-and-the-error-page и john-west-sitecore-blog/posts/2012/11/conflicting-files-mvc-routes-and-item-paths-in-the-sitecore-aspnet-cms

I't не меняют свой адрес, как вы хотите, но это поведение по умолчанию.

+1

Спасибо! Меня не волнует, заканчивается ли URL с «/ en» или «/ en /», просто важно, чтобы был показан правильный элемент. Вы также можете добавить эту ссылку к своему ответу: http://stackoverflow.com/questions/21183998/sitecore-gives-a-blank-page-with-just-the-text-default-page-in-my-mvc -решение –

Смежные вопросы