dotnetnuke - DNN返回父页面而不是404页面,如何返回404?
问题描述
我们有一个正常的 DNN 安装(v09.00.02 366),我们使用站点设置下的“默认页面”设置了一个 404 页面。
当您浏览到不存在的页面时,DNN 会返回父页面的内容而不是返回 404 页面,这是一种奇怪的行为。
/parent/child => 返回 /parent 的内容
子页面不存在,因此它应该返回带有 HTTP 状态代码 404 的 404 页面。
我们如何更改行为以遵循所需的行为?
解决方案
下面列出了未找到页面将在 DNN 中正确返回 404 错误的最常见实例:
- 这是一个根级页面,不存在https://example.com/not-found
- 该页面存在,但当前已被删除、禁用或受权限保护(和/或您没有适当的权限)
还有其他选择实例,但这是它的要点。这是因为 DNN 的动态特性。当一个模块被添加到一个页面时,DNN 不知道这个模块是否在动态创建它自己的 URL。
这方面的例子包括博客和新闻模块。非技术内容编辑需要能够创建新的博客文章或新闻项目,并且应该有自己的唯一 URL。
例子:
- 博客根页面: https ://example.com/blog
- 动态博客文章页面: https ://example.com/blog/this-is-a-new-article
- 动态博客文章页面: https ://example.com/blog/post/123/this-is-a-new-article
查看上面的示例,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];
推荐阅读
- python - 匹配除复杂正则表达式模式之外的所有内容并在 Pandas 中替换它
- sql - 如何获得工作的最新部门的开始日期
- django - 重新排序 django 表单字段
- javascript - 无法在 paytm js 结帐中加载付款选项
- python - 如何在网络中使用 Pandas Dataframe 创建自我图?
- html - 如何使 div 滚动贴在 div 内和另一个 div 下?
- javascript - 悬停时将 flex 子项扩展到全宽
- workflow - Camunda 并行运行 2 个任务,如果第一个任务完成,则取消第二个任务
- javascript - reactjs - 使用按钮组件在所有页面上显示对话框,无论它包含在哪里
- regex - grep 查找具有特定数据的文字 [方括号]