DNNreturn父页面不是404页面,如何return404?

DNN return parent page instead of 404 page, how to return 404?

我们有一个正常的 DNN 安装 (v09.00.02 366),我们使用站点设置下的 "Default Pages" 设置了一个 404 页面。

当您浏览到一个不存在的页面时,DNN return 访问父页面的内容而不是 return 访问 404 页面,这是一种奇怪的行为。

/parent/child => returns /parent

的内容

子页面不存在,因此它应该return HTTP 状态代码为 404 的 404 页面。
我们如何更改行为以遵循所需的行为?

在 DNN 中,未找到页面将正确 return 404 错误的最常见实例如下:

  • 这是一个根级页面,不存在 https://example.com/not-found
  • 该页面存在,但当前已被删除、禁用或受权限保护(and/or您没有适当的权限)

还有其他 select 个实例,但这就是它的要点。这是因为 DNN 的动态特性。当一个模块被添加到一个页面时,DNN 不知道这个模块是否正在动态创建它自己的 URL。

这方面的例子包括博客和新闻模块。非技术内容编辑需要能够创建新博客 post 或新闻条目,并且它应该有自己独特的 URL.

示例:

查看上面的示例,DNN 无法安全地重定向为 HTTP 404 错误,因为页面确实存在,但仅作为 URL,然后动态用于从页面上的模块。

一个解决方案是创建您自己的 URL 提供程序,您可以基于 DNN 核心中的提供程序。

另一个解决方案是确保您将独立页面(没有动态模块的页面)设置为指定规范 URL。您可以在页面的相应设置中执行此操作。

发布时有关 URL 提供程序的更多信息在下面的博客 post 中。

https://www.dnnsoftware.com/community-blog/cid/154518/page-not-found-404-error-handling-in-dnn

附带说明,许多 URL 提供程序功能没有 UI 来控制它们。您可以通过 运行 以下查询查看 URL 提供程序设置以了解设置内容。

-- the highest-level settings
SELECT * FROM [dbo].[HostSettings] WHERE [SettingName] LIKE '%aum_%' ORDER BY [SettingName];
-- setttings for each website, overriding the host-level settings
SELECT * FROM [dbo].[PortalSettings] WHERE [SettingName] LIKE '%aum_%' ORDER BY [PortalId], [SettingName];