1

我有一个使用 SSL 的 WSS 3.0 系统,其中每个页面都应该作为 https 服务。几乎所有页面都以 https 的形式出现,但在某些情况下,我单击一个链接会显示一个页面的 http 版本(不会加载)。在这些情况下,我必须手动输入“s”才能加载页面。发生这种情况的地方是:

  • /_layouts/newgrp.aspx :当我尝试创建一个新组时,它会将我带到http://server/_layouts/newgroup.aspx,尽管它应该是 https。该页面未在 http 加载。如果我手动更改网址,它会加载。
  • /_layouts/edtgrp.aspx :与 newgrp.aspx 相同
  • 如果我进入文档库并查看文件的版本历史记录,则该文件各个版本的 URL 是 http。有趣的是,当我将鼠标悬停在浏览器状态栏上时,它们也会显示 http(因此 SharePoint 在生成链接时会感到困惑,而不是在我单击它们时)

为了解决这个问题,我尝试向 DOM 添加一些 javascript 来搜索 http 的实例并将它们替换为 https。这在某些情况下有效,但有些地方是 javascript 无法到达的,例如当 SharePoint 提供目标 URL 以响应 POST 请求时,我认为 newgrp/edtgrp.aspx 就是这种情况。

我还尝试添加 ISAPI 过滤器以将页面从 http 重定向到 https。这似乎会导致重定向循环,无论如何我都不确定这些过滤器是否会保留查询字符串或 POST 信息。

有没有人看到这个问题?

更新:我们已经从 Squid 切换到 ISA,问题在版本历史中仍然存在,但在新组或编辑组中没有。我们还没有看到更改 AAM 设置的任何改进。

ISA中发生这种情况的地方:

  • 列表或文档库中的项目下的“版本历史记录”
  • 列表或文档库中项目下的“管理权限”
  • 列表或文档库中的项目下的“提醒我”
  • “人员和组”页面中的“添加用户”菜单项
  • “人员和组”页面中的“组设置”菜单项
  • “人员和组”页面中的“编辑组快速启动”菜单项
  • “人员和组”页面中的“设置组”菜单项
  • “人员和组”页面中的“列表设置”菜单项
4

5 回答 5

3

不确定是不是这样,但您是否检查过您的备用访问映射以确保它们显示的是 https 而不是 http?

于 2009-03-25T16:32:59.580 回答
1

我会回应检查您的备用访问映射的建议。SSL 是在 SharePoint 前端完成的,还是通过专用的 SSL 硬件完成的?

于 2009-03-26T18:45:32.283 回答
1

使用HTTP 模块修改 SharePoint 的输出,以便始终将链接更改为https. 这样的模块可以插入 IIS 并修改任何呈现的 HTML。我已使用此技术使 SharePoint XHTML 兼容并且运行良好。

更好的是,几乎所有的工作都已经为你完成了。UrlRewritingNet模块是开源的,可以免费下载。它应该适用于您的 SharePoint 网站。这个工具有很好的文档,并使用正则表达式来匹配要更改的 URL。为您的情况编写一个应该很容易,例如^http://. 如有必要,您还可以利用许多更高级的选项。

如果您更愿意自己编写,那么在 15 Seconds 网站上有一篇名为Rewrite.NET 的好文章——A URL Rewriting Engine for .NET 。

最后,如果您使用的是 IIS 7,您可以尝试它的URL Rewrite Module。我自己从未使用过它,也不知道它是否适用于 SharePoint,但它是可用的最受 UI 驱动的解决方案。

于 2009-11-02T12:34:24.487 回答
0

在 IIS 中添加从 http 到 https 的重定向。每次您访问该页面时,它都会将您重定向到您的 https 页面。

我还建议将 WSS 放在另一台服务器上,看看您是否有同样的问题。如果你不这样做,你可能需要重建/迁移你的东西。

于 2009-11-02T08:27:00.077 回答
0

亚历克斯用我认为通常可行的方法回答了这个问题。这是我专门解决这个问题的方法。

看起来当加载 SharePoint aspx 页面时,它会填充类型为 ContextInfo(在 init.js 中定义)的 javascript 结构,该结构在变量 ctx 中实例化。该结构有一个名为 httpRoot 的成员,后来在 core.js 中用于在各种下拉菜单中构建菜单项。

出于某种原因,此 ctx.httpRoot 在 SharePoint 创建的 aspx 文件中的 javascript 中填充,如下所示:

    ctx.HttpRoot = "http:\u002f\u002fsubdomain.domain.com";

是的,它有 Unicode 斜线,它有 http 而不是 https。我不知道为什么。但是,修复这行 javascript 似乎可以解决问题。

我通过在 ISA 中添加将 http:\u002f\u002f\ 转换为 https:\u002f\u002f\ 的 URL 转换规则来更改该行。我怀疑进行相同替换的 HTTP 模块也可以工作。或者可能是一些放置良好的 javascript 在某个时候重新分配变量。

我仍然认为这并不理想,必须有更合适的方法来修复这些链接。

于 2009-11-02T20:46:27.647 回答