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

Dotnetnuke DNN返回父页面而不是404页面,如何返回404?,dotnetnuke,dotnetnuke-9,Dotnetnuke,Dotnetnuke 9,我们有一个正常的DNN安装(v09.00.02 366),我们使用站点设置下的“默认页面”设置了404页面 有一种奇怪的行为,当您浏览到不存在的页面时,DNN返回父页面的内容,而不是返回404页面 /parent/child=>返回/parent的内容 子页面不存在,因此它应该返回HTTP状态代码为404的404页面。 如何更改行为以遵循所需的行为?未找到页面将在DNN中正确返回404错误的最常见实例如下所示: 它是根级别的页面,不存在 页面存在,但当前已被删除、禁用或受权限保护(和/或您没有

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

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

/parent/child=>返回/parent的内容

子页面不存在,因此它应该返回HTTP状态代码为404的404页面。

如何更改行为以遵循所需的行为?

未找到页面将在DNN中正确返回404错误的最常见实例如下所示:

  • 它是根级别的页面,不存在
  • 页面存在,但当前已被删除、禁用或受权限保护(和/或您没有适当的权限)
还有其他一些select实例,但这是它的要点。这是因为DNN的动态特性。将模块添加到页面时,DNN不知道该模块是否动态创建自己的URL

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

示例:

  • 博客根页面:
  • 动态博客帖子页面:
  • 动态博客帖子页面:
查看上面的示例,DNN无法安全地重定向为HTTP 404错误,因为页面确实存在,但仅作为URL,然后动态使用URL从页面上的模块加载自定义数据

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

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

有关发布时URL提供程序的更多信息,请参阅下面的博客文章

另一方面,许多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];

谢谢你的详细解释。我理解这种行为背后的原因,尽管我希望我们能两全其美。dnn清单中的一种路由设置,用于在与该路由匹配时,仅让dnn知道解析到该页面+模块,否则返回404。尽管如此,还是要感谢:)使用“规范”解决方案的问题在于,如果你有“子内容”,比如说一篇博客文章。在这种情况下,不应该有一个规范,但由于页面是共享的,所以有。因此,我们被迫以任何方式违反搜索引擎优化。我完全同意这两种意见。您应该考虑在GITHUB中创建一个问题来解决这些问题。