使用片段 (#) 重定向链接 - asp.net
Posted
技术标签:
【中文标题】使用片段 (#) 重定向链接 - asp.net【英文标题】:Redirect links with a fragment (#) - asp.net 【发布时间】:2014-09-13 18:18:55 【问题描述】:我有一个网站,其中包含不同位置的链接,每个链接都将用户带到特定的文档。 这些链接是硬编码的,这使得网站的每次更新都非常困难。 最近文档已更新,我们希望将每个旧链接更新为相应的新链接。
例如
(http://www.domain.com/OnlineDoc/default.aspx#ItemID=3551)
需要更新到
(http://domain.docfactory.com/#!doc/Toolkits/Item1-Administration-Doc)
使用ItemID
确定每个项目文档。
我正在尝试以编程方式将每个旧链接重定向到它对应的新链接。
我尝试使用 URL Rewrite 模块,但它似乎忽略了“#”之后的所有内容,这很重要,因为它决定了我们需要指向哪个文档。
我的问题是:
URL 重写模块可以工作吗? (有一个带有“#”的片段)
如果没有,Http 模块可以工作吗?
我正在尝试找到一种方法来轻松更新链接,而无需访问每个 Web 应用程序 html 并手动进行。
【问题讨论】:
片段未发送到服务器。它只能由浏览器访问。因此,您需要一个涉及客户端的解决方案。但是您可以将 URL 重写模块与 OnlineDoc/default.aspx 中的客户端脚本结合使用,该脚本将片段放在路径中,或者使用临时客户端重定向来查询 URL 的一部分。这使得文档项 ID 对 URL 重写模块可见,该模块可以执行永久的服务器端重定向到正确的 URL。不过,用户的体验可能有点出乎意料。 @bzlm 非常感谢,我会试试看。你能解释一下这种体验是如何出乎意料的吗? @bzlm 效果很好,我的老板很喜欢!!!我们将测试它几天。再次感谢您提出此解决方案。 很高兴它成功了。我已将其转换为正确的答案 - 如果它对您有帮助,它可以帮助其他人。 【参考方案1】:片段未发送到服务器。它只能由浏览器访问。因此,您需要一个涉及客户端的解决方案。
但是您可以使用 combination 中的 URL 重写模块和 OnlineDoc/default.aspx
中的客户端脚本,将片段放入 URL 的路径或查询部分,使用临时客户端重定向。这使得文档项 ID 对 URL 重写模块可见,该模块可以执行永久的服务器端重定向到正确的 URL。
澄清一下:
-
用户请求
/OnlineDoc/default.aspx#ItemID=123
此页面上的客户端脚本向/OnlineDoc/default.aspx?ItemID=123
发出“临时客户端重定向”(实际上,只是自动导航)
用户自动请求/OnlineDoc/default.aspx?ItemID=123
URL 重写模块拦截请求,并以永久重定向到docfactory.com/#!doc/Toolkits/Item1-Administration-Doc
进行响应
用户自动请求docfactory.com/#!doc/Toolkits/Item1-Administration-Doc
第一个重定向是临时的,因为您 cannot make permanent redirects with client-side scripting。第二个重定向是永久性的,因为新的 URL 应该总是替换旧的。
不过,使用此方法的用户的整体体验可能有点出乎意料,因为访问 OnlineDoc 的用户将在到达预期文档之前被重定向到 两次。大多数用户可能不会注意到第二次重定向,但第一次可能会很明显,即使只是轻微的。
【讨论】:
以上是关于使用片段 (#) 重定向链接 - asp.net的主要内容,如果未能解决你的问题,请参考以下文章