Sitecore URL中的语言嵌入

时间:2014-01-13 14:07:56

标签: sitecore sitecore7

我们在旧的经典asp网站(也是3种语言)中创建了FR,ES,EN的多语言网站。默认情况下,在旧网站中,英语“en”未嵌入URL中。但在我们新的sitecore网站上,我有语言Embedding =“Always”。

因此,当我们从旧网站重定向到新网站以获取Google中的301重定向时,如果我用法语打开我的新网站并且从旧网站重定向是英文(这意味着在网址中没有语言,即“en” “)链接将指向法语版本。)

那我怎么能在网址上添加“en”。

  HttpContext.Current.Request.RawUrl

我可以使用上面的方法来获取原始网址,但我没有得到如何在浏览器网址中显示“en”。

旧网站链接:

www.abc.com/xyz.asp,
www.abc.com/fr/xyz.asp,
www.abc.com/es/xyz.asp

新网站链接:

www.abc.com/en/xyz.aspx,
www.abc.com/fr/xyz.aspx,
www.abc.com/es/xyz.aspx

感谢

5 个答案:

答案 0 :(得分:2)

您是如何处理旧网站中的语言的?您是如何知道用户在EN / FR / ES中请求页面的?

由于您要从旧网站重定向301,因此您需要将语言嵌入到旧网站的网址中。从Sitecore方面处理它将最好只给你一个“更漂亮”的URL,在你检查重定向后是否必须添加另一个302重定向到同一页面的附加缺点是嵌入了或不是。 Ruud建议使用IIS Rewrite是一个很好的建议。

  

因此,当我们从旧网站重定向到新网站进行301重定向时   在谷歌,如果我用法语打开我的新网站并重定向   来自旧网站的是英文(这意味着在网址中没有   语言,即“en”)链接将指向法语版本。)

是的,这就是Sitecore的工作方式,它使用cookie来保留最后选择的语言,但上下文语言按以下顺序设置。您的初次访问将设置语言cookie。

  1. sc_lang查询字符串参数。
  2. 请求的网址中路径中的语言前缀。
  3. 与上下文网站关联的语言cookie。
  4. 与上下文逻辑站点关联的默认语言。
  5. web.config中指定的DefaultLanguage设置。
  6. Overriding Sitecore’s Logic to Determine the Context Language

    如果您确实不希望语言在浏览器会话之间保持不变,那么使用您自己的逻辑覆盖Sitecore.Pipelines.HttpRequest.LanguageResolver管道,以便不设置cookie(在这种情况下,您完全依赖于请求URL)或设置在浏览器关闭时将过期的cookie。您可以在this blog post中找到一个示例,以及之前链接的John West博客文章中的示例。

    如果您唯一关注的是Google索引,那么我可能不会进行任何更改,除非在您的网页上添加canonical link tags并使用包含语言的完整网址(对于每种语言版本,这显然会有所不同)。< / p>

    <link rel="canonical" href="http://www.abc.com/en/xyz.aspx"/>
    

答案 1 :(得分:1)

我不确切地知道您在这里问的是什么,但是如果您需要为特定Sitecore项目添加语言嵌入的URL,您只需要为链接提供程序配置languageEmbedding="always",然后请求该项目的URL使用LinkManager:

Sitecore.Links.LinkManager.GetItemUrl(item);

如果您需要特定语言的网址或在代码中明确设置languageEmbedding选项,则可以在UrlOptions中设置:

var options = Sitecore.Links.LinkManager.GetDefaultUrlOptions();
options.LanguageEmbedding = Sitecore.Links.LanguageEmbedding.Always;
options.EmbedLanguage(Sitecore.Globalization.Language.Parse("en"));

Sitecore.Links.LinkManager.GetItemUrl(item, options);

希望有所帮助!

答案 2 :(得分:0)

查看Sitecore.Pipelines.PreprocessRequest.StripLanguage ... 我会覆盖这个,如果没有找到使用现有函数的语言,我会默认回到en。

答案 3 :(得分:0)

您可以使用URLOptions,请参阅下面的代码 -

protected UrlOptions URLOptions
        {
            get
            {
                if (urlOptions == null)
                {
                    urlOptions = new UrlOptions()
                    {
                        LanguageEmbedding = LanguageEmbedding.Always,
                        AddAspxExtension = false
                    };
                }
                return urlOptions;

            }
        }

请在geturl()函数中传递此URloption对象,它将起作用。

LinkManager.GetItemUrl(itm,URLOptions)

答案 4 :(得分:0)

您可以通过sitecore设置实现此功能。

enter image description here

请参阅上面的截图。将languageEmbedding属性更改为始终来自asNeeded此设置在Sitecore.config文件中完成。如果这有助于您满足您的要求,请告诉我。