DNN返回父页面而不是404页面,如何返回404?

时间:2018-10-25 18:23:32

标签: dotnetnuke dotnetnuke-9

我们已正常安装DNN(v09.00.02 366),并使用站点设置下的“默认页面”设置了404页面。

这种奇怪的行为是,当您浏览到不存在的页面时,DNN返回父页面的内容而不是返回404页面。

/ parent / child =>返回/ parent

的内容

该子页面不存在,因此应返回HTTP状态代码为404的404页面。
我们如何改变行为以遵循期望的行为?

1 个答案:

答案 0 :(得分:1)

以下列出了找不到页面会在DNN中正确返回404错误的最常见实例:

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

还有其他选择实例,但这是要点。这是由于DNN的动态特性。将模块添加到页面时,DNN不知道该模块是否动态创建其自己的URL。

示例包括博客和新闻模块。非技术内容编辑者需要能够创建新的博客文章或新闻项目,并且应具有自己的唯一URL。

示例:

查看上面的示例,由于页面实际上确实存在,因此DNN无法安全地重定向为HTTP 404错误,而只能作为URL,然后将其动态用于从页面上的模块加载自定义数据。

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

另一种解决方案是确保您设置独立页面(没有动态模块的页面)以指定规范的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];
相关问题