【问题标题】:Javascript redirect based on referrer基于引用者的 Javascript 重定向
【发布时间】:2013-11-26 19:08:00
【问题描述】:

我有一个需要重定向的网站(我们称之为 www.abc.com)。登录页面是 www.abc.com/index.html,因此重定向需要在该页面上。如果引荐来源网址为空(有人直接键入域)或引荐来源网址来自应重定向到 www.abc.com/splash 的 abc.com 域(例如 google.com)外部,则重定向需要工作/index.html.

我想出的最接近的方法是下面的,但它不起作用。当我去 abc.com 时,它会进入很好的启动页面。但是,当我单击启动页面上的链接转到 abc.com 时,它会再次重定向回启动页面。无限循环。不知道在这里做什么,任何帮助表示赞赏!

<script type="text/javascript" charset="utf-8">
   if (document.referrer == '' || document.referrer.indexOf('www.abc.com') != -1) {
   top.location="http://www.abc.com/splash/index.html";
   }
</script>

【问题讨论】:

  • HTTP_REFERER 不保证存在或准确。不要依赖它。
  • 浏览器并不总是提供 document.referrer。如果引用者来自 https,则会被阻止,或者如果浏览器中的安全设置阻止,则不会提供任何内容。这些人将永远无法通过启动页面,并且将无法使用您的网站。
  • 谢谢大家,这很有帮助。我没有意识到从安全站点到非安全站点会删除引荐来源网址。这是有道理的,当我从谷歌来到我的网站时,它并没有给我一个推荐人。我必须找到另一种方法......

标签: javascript redirect referrer


【解决方案1】:

我想你是说

if (document.referrer == '' || document.referrer.indexOf('www.abc.com') == -1)

== 而不是!=indexOf 返回 -1 如果 没有 找到。

【讨论】:

    【解决方案2】:
    document.referrer.indexOf('www.abc.com') != -1
    

    表示引用者确实包含该字符串。如果我正确理解你的文字,你想要相反的。

    document.referrer.indexOf('www.abc.com') < 0
    

    编辑 或者,为了公平对待 URL 语法:

    document.referrer.match(/^http:\/\/www\.abc\.com.*/)
    

    【讨论】:

    • 好吧。我遇到的问题是,当我使用“
    • 做错了才有效,不代表就对了!您使用 .indexOf 来确定引用者是否在外部是天真的。你真的应该检查一下实际的域名不是 abc.com。也许看到这个:stackoverflow.com/questions/4140324/parse-url-with-javascript
    • 我非常感谢您的帮助,但它实际上并不天真。使用 location.hostname.match 检查实际域将告诉我我当前所在的域将始终是 www.abc.com。那有什么好处?我需要引荐来源网址,而不是 abc.com 之外的任何内容作为引荐来源网址的域。
    • 这很幼稚,因为 otherdomain.com/q?goto=www.abc.com 和 abc.com 都会匹配您的 .indexOf 搜索,即您不能使用它来区分这些两种情况。您需要解析 URL。我不建议使用 location.hostname,但是还有其他指针 int hat thread 关于如何根据其语法解析 url。
    • 好的,我的回答更明确了。
    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多