<sitecore> languageEmbedding =总是,但是从url手动删除语言仍然有效

时间:2018-10-22 13:41:01

标签: sitecore

我的条件是我已经配置了“ languageEmbedding = always”,它可以很好地工作,并且可以按照每个人的意愿工作,但是,当从浏览器的网址栏中手动删除该语言时,它不会重定向或重新添加语言,以下是一个例子:

http://app.local/de/index->很好

http://app.local/index->仍然可用, 但不符合要求,我们希望它应该刷新并将url更改为http://app.local/ de / index或当前语言。

网址必须始终带有语言。

这是我当前的链接管理器配置

<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="always" languageLocation="filePath" lowercaseUrls="true" shortenUrls="true" useDisplayName="true"/>

如何做到?

3 个答案:

答案 0 :(得分:1)

语言嵌入和您的链接提供者是创建链接,而不是解析它们。

如果要验证url中的语言并在不存在该语言时进行重定向,则可以将处理器添加到httprequestbegin管道中,然后在其中放置逻辑。 http://insitecore.tumblr.com/post/37734162227/sitecore-httprequestbegin-pipeline-in-detail

答案 1 :(得分:0)

就像Gatogordo所说的那样,在渲染项目URL时,LinkManager使用languageEmbedding设置。该网站将始终解析为默认语言,而网址中没有语言代码。我们最终在负载均衡器中进行了重定向,因为我们已经在其中开始了一些重定向登录。

答案 2 :(得分:0)

我通过以下硬代码解决了这一要求

    var mustHave = "/" + Sitecore.Context.Language;
    var isWithLanguage = HttpContext.Current.Request.Url.AbsoluteUri.Contains(mustHave);
    if (!isWithLanguage)
    {
        var urltmp = Helper.GetUrl(Sitecore.Context.Item.ID.ToString(), Sitecore.Context.Language.ToString());
        Response.Redirect(urltmp);

    }

我将这个条件代码放入布局页面中,因此每次页面加载时都会对其进行验证。