我们正在尝试让 F5 BIG-IP LTM iRule 在 SSL 终止角色中与 SharePoint 2007 一起正常工作。此架构将所有 SSL 处理卸载到 F5,F5 仅通过 HTTP(通过安全网络)将交互式请求/响应转发到 SharePoint 前端服务器。
出于本讨论的目的,iRules 由 F5 Networks BIG-IP 设备上的 Tcl 解释引擎解析。
因此,F5 对通过它的流量做了两件事:
- 通过 HTTP 302 重定向和 URL 重写将任何对端口 80 (HTTP) 的请求重定向到端口 443 (HTTPS)。
- 重写对浏览器的任何响应,以选择性地重写嵌入在 HTML 中的 URL,以便它们转到端口 443 (HTTPS)。这可以防止 302 重定向破坏由 SharePoint 生成的 DHTML。
我们的第 1 部分工作正常。
第 2 部分的主要问题是,由于 XML 命名空间和其他类似问题,在响应重写中,并非“http:”的所有匹配项都可以更改为“https:”。有些必须保留“http:”。此外,一些“http:”URL 存在困难,因为它们存在于 SharePoint 生成的 JavaScript 中,并且它们的斜杠(即“/”)实际上在 HTML 中由 UNICODE 6 字符字符串“\u002f”表示。
例如,在这些棘手的情况下,传出 HTML 中的文字字符串是:
http:\u002f\u002fservername.company.com\u002f
并应改为:
https:\u002f\u002fservername.company.com\u002f
目前我们甚至无法弄清楚如何在这些 UNICODE 序列字符串文字上的搜索/替换表达式中获得匹配。似乎无论我们如何对其进行切片,Tcl 解释器都会在执行任何其他操作之前将“\u002f”字符串解释为“/”翻译。
我们已经尝试了我们所知道的 Tcl 转义方法的各种组合(主要是双引号和使用额外的“\”来转义 UNICODE 字符串中的“\”),但正在寻找更多的方法,最好是那些有效的方法。
有没有人有任何想法或指示我们可以在哪里有效地进行自我教育?
首先十分感谢。
不建议使用 SharePoint 执行您尝试执行的操作。
推荐的方法是在 SharePoint 中使用备用访问地图。您将创建一个 https:// 的公共 URL,并具有一个内部名称 http://。
这将导致您页面上的所有 URL 都使用 https:// 创建
如果你不喜欢这个答案,你可能想在 ServerFault http://serverfault.com 上问这个问题。
@JD,我可能应该添加这个:
有问题的 SharePoint Web 应用程序当前托管在与 SQL Server 2005 Reporting Services (SSRS) 和 PerformancePoint 2007 (PPS) 集成(在其他 Web 应用程序上)的物理服务器和 SharePoint Farm 上。两种产品都不支持备用访问映射 (AAM)。
虽然我们想要执行上述操作的 Web 应用程序确实没有与 SSRS 或 PPS 集成,但我们的架构师和我们的技术主管希望尽可能避免在该环境中使用 AAM。
因此,虽然原则上我同意你的回答,但在这种情况下,我要求特殊例外,并特别询问 Tcl 和 UNICODE 转义,因为我和我们的其他技术战略家认为这是在这种特殊情况下的正确答案。
我对 sharepoint 一无所知,但至少从纯 tcl 的角度来看,以下显示了如何匹配您的文字字符串:
重要的是确保 \u002f 中的反斜杠不会被 tcl 解析器解释(通过将模式括在 {} 中),并且还要确保反斜杠不会被正则表达式解析器解释(通过转义它带反斜杠)。
供将来参考,因为这最近也出现了......
Sharepoint 备用访问映射是最干净的解决方案。
对于 BIG-IP iRule,您可以尝试类似的方法。请注意,TCL 需要先解释 unicode 字符,然后才能匹配它们。
亚伦
用 \456\def 替换 \123\abc
流::表达式 {@\\123@\456@ @\\abc@\def@}