0

在我的 sitefinity 应用程序中,当我生成站点地图时,它会成功生成,但站点地图在所有节点的 URL 中显示双语言前缀。

就像我的站点地图中生成的 url 节点

   <url>    
    <loc>http://www.example.net/en/en/individual/customer- 
    service</loc>
    <priority>1</priority>
    <xhtml:link rel="alternate" hreflang="en" 
    ref="http://www.example.net/en/en/individual/customer-service" />
     <xhtml:link rel="alternate" hreflang="ar"
     ref="http://www.example.net/en/ar/individual/customer-service" />
     </url>

But I expect the generated url node like this

   <url>    
    <loc>http://www.example.net/en/individual/customer- 
    service</loc>
    <priority>1</priority>
    <xhtml:link rel="alternate" hreflang="en" 
    ref="http://www.example.net/en/individual/customer-service" />
     <xhtml:link rel="alternate" hreflang="ar"
     ref="http://www.example.net/ar/individual/customer-service" />
   </url>
4

1 回答 1

1

总结评论中讨论的内容:

该问题是由SubFolderUrlLocalizationStrategy具有以下参数引起的: includeSubfoderPrefixForDefaultLanguage = True

删除参数可以解决问题。

这似乎是该版本的 Sitefinity 中的站点地图模块中的一个错误,因为例如我在 v.10.2 中没有看到它。

保留参数并解决问题的一种方法是订阅ISitemapGeneratorBeforeWriting事件并在保存站点地图条目之前对其进行修改,例如 Replace("/en/en/", "/en/")

本文介绍了如何: https ://knowledgebase.progress.com/articles/Article/How-to-modify-the-entries-in-sitefinity-sitemap-using-SitemapGeneratorBeforeWriting-event

protected void Application_Start(object sender, EventArgs e)
{
    Bootstrapper.Initialized += Bootstrapper_Initialized;
}

void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs e)
{
    if (e.CommandName == "Bootstrapped")
    {
        EventHub.Subscribe<ISitemapGeneratorBeforeWriting>(evt => SitemapGeneratorBeforeWritingHandler(evt));
    }
}

void SitemapGeneratorBeforeWritingHandler(ISitemapGeneratorBeforeWriting @event)
{
    var entries = @event.Entries;
    // CRUD operations over the sitemap entries goes here
}
于 2019-04-12T00:43:18.333 回答