<Sitecore> languageEmbedding=always,但从 url 中手动删除语言仍然有效
<Sitecore> languageEmbedding=always, but language is removed manually from url still works
我已经配置了 "languageEmbedding=always",它运行良好,但是,当语言从浏览器的 url 栏中手动删除时,它不会重定向或重新添加语言,这是一个示例:
http://app.local/de/index -> 好
http://app.local/index -> 仍然可用,
但不符合要求,我们希望它应该刷新并将 url 更改为 http://app.local/de/index 或当前语言。
url 必须始终使用语言。
这是我当前的 link 管理器配置
<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"/>
怎么做?
语言嵌入和您的 link 提供程序是创建 link,而不是解析它们。
如果你想验证 url 中的语言并在它不存在时重定向,你可以向 httprequestbegin 管道添加一个处理器并将你的逻辑放在那里。 http://insitecore.tumblr.com/post/37734162227/sitecore-httprequestbegin-pipeline-in-detail
正如 Gatogordo 所说,LinkManager 在呈现项目 urls 时使用了 languageEmbedding 设置。该站点将始终解析为没有 url 中的语言代码的默认语言。我们最终在负载均衡器中进行了重定向,因为我们已经在那里开始了一些重定向登录。
我通过以下硬代码解决了这个需求
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);
}
这个条件代码我放在布局页面中,所以每次页面加载时都会验证它。
我已经配置了 "languageEmbedding=always",它运行良好,但是,当语言从浏览器的 url 栏中手动删除时,它不会重定向或重新添加语言,这是一个示例:
http://app.local/de/index -> 好
http://app.local/index -> 仍然可用, 但不符合要求,我们希望它应该刷新并将 url 更改为 http://app.local/de/index 或当前语言。
url 必须始终使用语言。
这是我当前的 link 管理器配置
<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"/>
怎么做?
语言嵌入和您的 link 提供程序是创建 link,而不是解析它们。
如果你想验证 url 中的语言并在它不存在时重定向,你可以向 httprequestbegin 管道添加一个处理器并将你的逻辑放在那里。 http://insitecore.tumblr.com/post/37734162227/sitecore-httprequestbegin-pipeline-in-detail
正如 Gatogordo 所说,LinkManager 在呈现项目 urls 时使用了 languageEmbedding 设置。该站点将始终解析为没有 url 中的语言代码的默认语言。我们最终在负载均衡器中进行了重定向,因为我们已经在那里开始了一些重定向登录。
我通过以下硬代码解决了这个需求
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);
}
这个条件代码我放在布局页面中,所以每次页面加载时都会验证它。