我正在将一些 Sharepoint 站点从一个场迁移到另一个场。它有点复杂,但为了简单起见......
我想要维护的是人们为这些站点、文档等提供的旧 URL,而 IIS URL 重写模块似乎是一个不错的选择。
这是结构的概念:
_______________________ _______________________
|oldfarm.company.com**| |newfarm.company.com**|
|oldsitecollection** | |newsitecollection** |
|subsitename | |subsitename |
|... | |... |
|_____________________| |_____________________|
** = 变化,其他一切都保持不变,URLwise。
在“newfarm”上,我扩展了 Web 应用程序以响应“oldfarm.company.com”,并且该 Web 应用程序有一个 URL 重定向规则,将http://oldfarm.company.com/oldsitecollection/ ... 重定向到http ://newfarm.company.com/newsitecollection/ ...
这对我想做的绝大多数事情都很有效。
我遇到的困难是重写 QUERYSTRING 值。Sharepoint 的 Office 文档查看器在 QUERYSTRING 中包含路径信息,这就是我需要更改的内容。
这是重定向后的 URL(也是我卡住的地方): http://newfarm.company.com/newsitecollection/subsitename/_layouts/WordViewer.aspx?id=/oldsitecollection/subsitename/doclib/doc.docx&Source= http %3A%2F%2Foldfarm%2Ecompany%2Ecom%2Foldsitecollection%2Fsubsitename%2Fdoclib%2FForms%2FAllItems%2Easpx&DefaultItemOpen=1
我曾尝试使用 Rewrite Maps,因为这些不是动态替换,但我无法让它们修改 QUERYSTRING。
这是我正在处理的重写规则的示例:
<rewrite>
<rewriteMaps>
<rewriteMap name="WordViewer">
<add key="id=/oldsitecollection" value="id=/newsitecollection" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite rule1 for WordViewer">
<match url=".*WordViewer.aspx" />
<conditions>
<add input="{WordViewer:{QUERY_STRING}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>