【问题标题】:Redirecting external URLs to an exit page将外部 URL 重定向到退出页面
【发布时间】:2011-01-26 15:11:11
【问题描述】:

将请求外部 URL 的用户重定向到某种告别页面的最佳方式是什么?

我知道我可以努力安装某种类似 mod_rewrite 的模块。但是我不能在 global.asax 或母版页中执行某种 Page_OnRequest 类型的函数吗?

【问题讨论】:

    标签: c# asp.net global-asax


    【解决方案1】:

    在将它们转发到最终目的地之前,您可以让这些 url 实际上指向您自己网站上的重定向页面:

    <a href="redirect.aspx?url=stackoverflow.com">Stack Overflow</a>
    

    然后你可以对重定向做任何你想做的事情,它可以工作,以便重定向隐藏 url、对其进行编码、添加参数等。

    【讨论】:

    • 这似乎是一种很常见的做法。
    • @DashTechnical - 这不是我真正参与的,因为它看起来有点“老大哥”,但它是我在几个网站上看到的。
    • 所有链接都已经写好的情况怎么办?只需查找+替换?
    • 理想情况下,我认为这种性质的链接将来自某种内容管理系统,因此它们可以像您提到的那样以查找/替换方式动态捕获。这可以在许多领域进行。您甚至可以覆盖(在页面基类中)Page_Render 事件以在它们“走出门”时捕获这些 url。
    • :(...我希望这和使用 Apache 一样简单,使用 mod_rewrite 无需尝试查找第三方应用程序。
    【解决方案2】:

    最简单的方法是使用jQuery将点击事件挂钩到页面上的所有标签上:

    $(function(){
    
      $('a').click(function(e){
        var proceed       = true ;
        var anchor        = $(this) ;
        var href          = anchor.attr('href') ;
        var isExternalUrl = CheckForExternalUrl( href ) ;
    
        if ( isExternalUrl )
        {
          e.PreventDefault() ;
          window.location = "outside_link.aspx?url=" + href ;
          proceed         = false ;
        }
        return proceed ;
      }) ;
    }) ;
    

    任何被点击的链接都会触发事件处理程序。外部 URL 将导致页面 outside_link.aspx 与查询字符串中的目标 URL 一起加载。内部 URL 将正常运行。

    简单。

    【讨论】:

    • 我在想这个,除了道场。但我担心他们可能会禁用 javascript 或没有脚本等。但本质上,这可能更好。虽然我更喜欢服务器端的方法。
    • 编写一个覆盖 EndRequest() 的 HttpModule。或者在 global.asax 的 Application_EndRequest() 中进行。让您的实现对 Html 进行迭代,并对外部链接进行所需的链接修复。见15seconds.com/issue/020417.htm
    猜你喜欢
    • 2019-12-14
    • 2013-11-23
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2013-04-19
    • 2021-05-03
    相关资源
    最近更新 更多