重定向链接与片段(#) - asp.net

时间:2014-07-22 19:04:45

标签: c# url rewrite fragment

我的网站包含不同地方的链接,每个链接都会将用户带到特定的文档 这些链接是硬编码的,这使得对网站的每次更新都非常困难 最近文档已更新,我们希望用相应的新链接更新每个旧链接。

例如

(http://www.domain.com/OnlineDoc/default.aspx#ItemID=3551)

需要更新到

(http://domain.docfactory.com/#!doc/Toolkits/Item1-Administration-Doc)

使用ItemID确定每个项目文档。

我要做的是以编程方式将每个旧链接重定向到相应的新链接。

我尝试使用URL Rewrite模块,但似乎忽略了“#”之后的所有内容,这很重要,因为它决定了我们需要指向哪个文档。

我的问题是:

  1. 网址重写模块是否有效? (有一个带有“#”的片段)

  2. 如果没有,Http模块会工作吗?

  3. 我正在尝试找到一种方法来轻松更新链接,而无需访问每个Web应用HTML并手动执行。

1 个答案:

答案 0 :(得分:2)

片段不会发送到服务器。它只能由浏览器访问。所以你需要一个涉及客户端的解决方案。

但是可以 使用组合中的URL重写模块与OnlineDoc/default.aspx中的客户端脚本,它将片段放在路径或查询部分中使用临时客户端重定向的URL。这使得文档项ID对URL重写模块可见,该模块可以执行永久的服务器端重定向到正确的URL。

澄清:

  1. 用户请求/OnlineDoc/default.aspx#ItemID=123
  2. 此页面上的客户端脚本发出“临时客户端重定向”(实际上只是一个自动导航)到/OnlineDoc/default.aspx?ItemID=123
  3. 用户自动请求/OnlineDoc/default.aspx?ItemID=123
  4. 网址重写模块拦截请求,并通过永久重定向回复docfactory.com/#!doc/Toolkits/Item1-Administration-Doc
  5. 用户自动请求docfactory.com/#!doc/Toolkits/Item1-Administration-Doc
  6. 第一次重定向是暂时的,因为您cannot make permanent redirects with client-side scripting。第二个重定向是永久性的,因为新URL应始终替换旧URL。

    使用此方法的用户的总体体验可能有点出乎意料,因为访问OnlineDoc的用户在到达目标文档之前将被重定向到两次。大多数用户可能不会注意到第二次重定向,但第一次重定向很可能是显而易见的,如果只是轻微的话。