我们有一个正常的 DNN 安装(v09.00.02 366),我们使用站点设置下的“默认页面”设置了一个 404 页面。
当您浏览到不存在的页面时,DNN 会返回父页面的内容而不是返回 404 页面,这是一种奇怪的行为。
/parent/child => 返回 /parent 的内容
子页面不存在,因此它应该返回带有 HTTP 状态代码 404 的 404 页面。
我们如何更改行为以遵循所需的行为?
我们有一个正常的 DNN 安装(v09.00.02 366),我们使用站点设置下的“默认页面”设置了一个 404 页面。
当您浏览到不存在的页面时,DNN 会返回父页面的内容而不是返回 404 页面,这是一种奇怪的行为。
/parent/child => 返回 /parent 的内容
子页面不存在,因此它应该返回带有 HTTP 状态代码 404 的 404 页面。
我们如何更改行为以遵循所需的行为?
下面列出了未找到页面将在 DNN 中正确返回 404 错误的最常见实例:
还有其他选择实例,但这是它的要点。这是因为 DNN 的动态特性。当一个模块被添加到一个页面时,DNN 不知道这个模块是否在动态创建它自己的 URL。
这方面的例子包括博客和新闻模块。非技术内容编辑需要能够创建新的博客文章或新闻项目,并且应该有自己的唯一 URL。
例子:
查看上面的示例,DNN 无法安全地重定向为 HTTP 404 错误,因为页面确实存在,但只能作为 URL,然后动态用于从页面上的模块加载自定义数据。
一种解决方案是创建您自己的 URL 提供程序,您可以基于 DNN 核心中的提供程序。
另一种解决方案是确保将独立页面(没有动态模块的页面)设置为指定规范的 URL。您可以在页面的相应设置中执行此操作。
有关发布时 URL 提供程序的更多信息,请参阅下面的博客文章。
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];