我的网站有很多网址重写,其中很大一部分包含以国家/地区代码为前缀的旧链接(例如/ fr,/ de等)。重写没有前缀工作得很好,但那些触发Sitecore的嵌入式语言URL解析器完全绕过重写模块。
示例 / fr / old-link 尝试解析' fr'作为一种语言,并作为一种语言失败,因为fr-FR'是法语的名称。
解决方案我需要禁用Sitecore在网址中检测语言前缀的功能,以便网址重写模块可以不受阻碍地进行。
我无法找到发生这种情况的渠道。我已经和Reflector一起经历过很多次。我需要帮助。
答案 0 :(得分:1)
您需要创建一个新的LanguageResolver来替换标准的Sitecore(Sitecore.Pipelines.HttpRequest.LanguageResolver
)。这在web.config的<httpRequestBegin>
管道部分中引用。在这里你可以处理以fr开头而不是fr-FR等的请求。过去我做过类似的事情,因为我们想要使用非ISO语言代码。
修改强>
LanguageResolver
首先根据查询字符串解析语言,但也会根据文件路径解析(即在路径的开头有fr-FR)。我认为你需要从Sitecore LanguageResolver继承并覆盖GetLanguageFromRequest方法,改变else
语句以使用与Context.Data.FilePathLanguage
不同的东西 - 可能只是使用正则表达式/字符串操作从URL获取第一个文件夹然后用它来设置上下文语言。这应该可以防止无法解析语言,我理解这种语言会杀死你的URL重写模块。
答案 1 :(得分:1)
要查看的另一个管道是preprocessRequest管道。它有一个StripLanguage处理器,可以检测URL的第一部分是否是一种语言并对其起作用。
有关如何让Sitecore忽略网址语言部分的更多信息,请参阅此帖http://sitecoreblog.patelyogesh.in/2013/11/sitecore-item-with-language-name.html