如何让2sxc应用的友好URL显示在DNN的Sitemap.aspx站点地图中
DNN站点地图添加2sxc自定义详情页URL解决方案
完全可以实现,你可以通过DNN的站点地图扩展机制结合2sxc的API来注入所有详情页链接,具体操作方案如下:
方案1:使用2sxc内置站点地图集成功能(推荐,适配2sxc v11+版本)
2sxc高版本已经内置了DNN站点地图的扩展支持,无需额外开发即可完成配置:
- 进入2sxc应用后台,找到存储详情条目对应的内容类型
- 打开内容类型的「设置」面板,找到「站点地图(Sitemap)」配置区块
- 勾选「将此类型的内容条目加入DNN站点地图」选项
- 在URL规则配置栏填入你的详情页路由规则:
/landing-page/details/[UrlSlug],将[UrlSlug]替换为你存储自定义友好URL后缀的字段名 - 按需配置每条条目的优先级、更新频率参数,保存后清理DNN全站缓存即可生效
方案2:自定义DNN站点地图提供者(适配低版本2sxc/自定义路由场景)
如果你的2sxc版本较低,或者路由规则有特殊自定义逻辑,可以自行实现DNN的ISitemapProvider接口注入链接:
- 按照如下逻辑编写自定义提供者代码:
using DotNetNuke.Services.Sitemap; using System.Collections.Generic; using System.Linq; public class Custom2sxcSitemapProvider : SitemapProvider { public override List<SitemapUrl> GetUrls(int portalId, SitemapOptions options) { var urls = new List<SitemapUrl>(); // 初始化2sxc应用服务,替换为你的实际应用ID var appService = ToSic.Sxc.Dnn.Factory.GetAppService(portalId, 123); // 获取所有已发布的详情条目,替换为你的实际内容类型名称 var detailItems = appService.Data["DetailItem"].Where(i => i.IsPublished); foreach (var item in detailItems) { urls.Add(new SitemapUrl { // 替换为你的实际URL规则,UrlSlug替换为你的友好URL字段名 Url = $"https://your-domain.com/landing-page/details/{item.UrlSlug}", LastModified = item.Modified, Priority = 0.8f, ChangeFrequency = SitemapChangeFrequency.Monthly }); } return urls; } }
注意替换代码中的应用ID、内容类型名称、URL字段名为你实际业务对应的参数
2. 将编译后的dll文件放到DNN站点的bin目录
3. 在DNN后台「主机」-「扩展」-「站点地图提供者」中添加你自定义的提供者即可生效
验证方式
配置完成后访问domain.com/Sitemap.aspx,即可看到所有2sxc详情页的URL已经被收录到站点地图中,如果没有立即生效可以清理DNN的站点缓存后再刷新。
内容的提问来源于stack exchange,提问作者Aaron - Wolf X Machina
相关产品推荐
相关产品推荐

