使用片段 (#) 重定向链接 - 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的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 将 http 重定向到 https

ASP.NET Core 中的重定向

如何将任何子域请求重定向到asp.net中的主域

使用参数登录 asp.net 重定向

如何在 asp.net 中使用 301 重定向

asp.net 2005 中的 301 永久重定向