65.9K
CodeProject 正在变化。 阅读更多。
Home

修复 DotNetNuke 中的无限重定向循环

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (2投票s)

2008年10月5日

CPOL

4分钟阅读

viewsIcon

41952

Firefox 已检测到服务器正在以一种永远无法完成的方式重定向此地址的请求。

引言

解决 DotNetNuke 无限重定向循环:“Firefox 已检测到服务器正在以一种永远无法完成的方式重定向此地址的请求。”

背景

有一件事一直困扰我一段时间了……新安装的 DotNetNuke 站点出现了一系列无法解释的重定向循环。

如何解决此问题

如果您遇到此问题,您的站点将在 IE 中无法加载 - 它只会挂起,似乎什么都没做。当您尝试在 Firefox 中打开时,您将收到错误消息:“Firefox 已检测到服务器正在以一种永远无法完成的方式重定向此地址的请求。”

过去,解决 DotNetNuke 重定向循环问题很容易 - 只有两个可能的原因,并且很容易通过 Google 找到解决方案。如果您真的想知道如何解决这两个问题,请参阅本文底部。

然而,自 4.7 版本左右以来,出现了一种新的重定向循环方式。现在,许多人在他们的 DotNetNuke 网站上遇到重定向循环,并且在 Google 上找不到解决方案。

有一篇文章暗示了解决方案的一半,有几篇文章暗示了另一半。但现在,所有这些暗示都首次被汇集在一起,以一劳永逸地解决这个问题。

导致解决问题的第一条线索可以在 Chris Hammond 的博客 上找到,他提到该问题发生在您使用中等信任时。

但是,这并不完整,因为 DotNetNuke 可以在中等信任下运行,并且确实如此 - 因此,将您的web.config更改为使用完全信任并非解决方案。相反,让我们看看中等信任下的 DNN,看看是否有其他最近发现的问题 - 事实证明,自 4.7 版本以来(这与新重定向 bug 出现的时间相符)已经出现了一两次。我所说的问题是,AJAX 在中等信任下不起作用(使用默认的web.config设置时)。

因此,这个问题的首要嫌疑是 Microsoft AJAX.Net,它在中等信任下不起作用,如果它位于您网站的/bin文件夹中(它必须位于 GAC 中)。所以,解决这个 bug 的关键是让 Microsoft AJAX.Net 在中等信任下安装并正常工作。有几种选项可以解决这个问题:

  1. 安装 .NET Framework 3.5(这包括 AJAX 3.5),或
  2. 下载并安装 AJAX Extensions 1.0(这是 ASP.NET Framework 2.0 的 AJAX)。此下载可在此页面的底部找到。

    安装其中任何一个后,您还需要更改您的web.config,以便您的网站知道您正在使用哪个版本的 AJAX。

  3. (a) 如果您安装了 .NET Framework 版本 3.5:打开您的web.config并将所有Version=1.0.61025.0替换为Version=3.5.0.0 - 确保全部替换!然后,重启 IIS(开始 - 运行 - cmd - iisreset)。
  4. (b) 如果您安装了 AJAX Extensions 1.0:只需重启 IIS(开始 - 运行 - cmd - iisreset)。

    如果您使用的是托管的 Web 服务器,那么您需要联系您的托管支持部门来为您解决此问题。他们可能已经安装了 3.5。在这种情况下,只需按照上面 2(a) 中的描述更改您web.config中的版本号。

如果您想亲自证明这是重定向循环的原因(不要相信网上的一切!),只需按照以下实验操作:

  1. 使用中等信任安装一个新的 DNN 网站。确认它存在重定向循环。
  2. 安装 Extensions 1.0 并按照上面 2(b) 的方法进行操作。确认重定向循环已消失。
  3. 卸载 Extensions 1.0 并确认重定向循环再次出现。
  4. 安装 Framework 3.5 并按照上面 2(a) 的方法进行操作。确认重定向循环已消失。

其他可能的原因

在此 bug 出现之前,最常见的重定向循环方式是什么,以及如何解决?有些人可能仍然会遇到由这些问题引起的重定向循环,因此在此列出解决方案是值得的。

  1. 您的门户别名末尾有一个“/”,例如:www.example.com/。只需删除“/”即可解决问题。
  2. 网站使用的端口号不是 80。只需更改web.config并将usePortNumber="true"设置为(请注意,没有设置说明*使用哪个*端口号,这由 IIS 控制)。

关注点

顺便说一句,这个 bug 的来源在PageBase.vb大约第 529 行

If objBasePortalException.Message.Contains("System.Web.Extensions") Then
    ' suppress AJAX error in Medium Trust
    Response.Redirect(strURL)
Else

这段代码会检查一个包含“System.Web.Extensions”(AJAX DLL)的异常,如果找到,它会重定向回当前页面 - 这当然会抛出相同的异常,该异常会被捕获,页面会被重定向回同一个 URL,然后……糟糕!

历史

此解决方案首次发布在我的DotNetNuke 技术博客上。

© . All rights reserved.