重定向IF引用者匹配目标

时间:2013-12-08 07:07:41

标签: javascript php

如果引荐来源与已加载的网站匹配,我想重定向到其他网页。我想这样做是因为我在几个网站上同时运行一个php rotator脚本。但是,如果我在网站ABCD上公布了网站A,我希望网站A仅在引荐者与网站BC或D匹配时显示引用者是否与网站A匹配。这是为了防止自己显示相同的网站。 / p>

脚本是在iframe中加载的php脚本。它没有引用隐形或类似的东西。我可以在rotator脚本中包含任何javascript或php。

任何想法或指示都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

抱歉,这有点长,但我想确保回答得很好。

让我们清楚并使用一致的术语来确保我们在同一页面上:

redirect表示捕获当前页面的请求并将其指向其他页面。

  

例如:
    在地址栏中输入“http://gooogle.com”会重定向到“http://google.com

有多种重定向,我们不会在这里介绍它们。

referer表示链接到所请求页面的URI,从HTTP标头中拉出

  

例如:
  你在“http://slate.com”页面上   您点击了一个指向“http://newsweek.com”的链接   在这种情况下,你的引用者是“http://slate.com”。

     

重定向可能会修改引用者的值,具体取决于重定向的类型。

为了实现您的目标:不在您当前所在页面的iframe中显示广告,您实际上并不关心其中任何一个。您不需要任何重定向,也不需要担心链接到当前页面的人。


考虑您的网页如何运作:

在页面加载时会执行一个javascript,会在文档中插入iframe 反过来,iframe会在显示广告的服务器上加载PHP文件。

所以你有一个看起来像这样的HTML页面:
的index.html

<!doctype HTML>
<html>
  <head><title>Server A Index</title></head>
  <body>
    <header>
      <section id="top_banner_ad">
        <script src="./js/adrotator.js"></script>
      </section>
    </header>
    <!-- Some content... -->
  </body>
</html>

调用看起来像这样的JavaScript:
/js/adrotator.js

var holder = document.getElementById("top_banner_ad");
var iframe = document.createElement("iframe");
iframe.src = "http://example.com/inc/adrotators.php";
holder.appendChild(iframe);

最后,调用一个看起来像这样的PHP脚本:
/inc/adrotators.php

<!doctype HTML>
<html>
  <head><title></title></head>
  <body>
    <?php $advert = get_advert(); ?>
    <a href="<?php echo $advert['url']; ?>">
      <img src="<?php echo $advert['imgsrc']; ?>">
    </a>
  </body>
</html>

我不确定在这种情况下您有什么权限,但我会假设您可以访问所有这些:托管脚本的页面( index.html ),创建iframe( /js/adrotator.js )的javascript,以及iframe调用的php脚本( /inc/adrotator.php )。

您至少有两个解决方案:

你可以让/js/adrotator.js从index.html中找到并告诉/inc/adrotator.php它是谁,或者你可以让/inc/adrotator.php找出它的父框架是谁。

  • 因此,iframe了解其父框架(尽管它们实际上只能沟通under certain circumstances
    如果你的iframe加载了一个位于同一个域(subdomains matter)的页面,一个解决方案就是在iframe中使用javascript(在PHP生成的HTML中)检查其父级,如下所示:

    parent.document.location.href 
    

    如果目标域与父级匹配,则请求新广告。

  • (首选)如果您可以修改在您的网页中创建iframe的javascript,那么您可以让javascript检查网址并将其作为url参数添加到src属性它调用的iframe 例如:

    var host_url = window.location.href;  
    var iframe = document.createElement("iframe");  
    iframe.src = "http://example.com/ad_rotator.php?host="+ host_url;
    document.body.appendChild(iframe);
    

    然后您的PHP脚本无法投放目标与$ _GET [“host”]

    匹配的广告
    <?php 
      $advert = get_advert();
      while ($advert['url'] == $_GET['host']) {
        $advert = get_advert();
      }
    ?>
    <a href="<?php echo $advert['url']; ?>">
      <img src="<?php echo $advert['imgsrc']; ?>">
    </a>
    

这里的所有代码都是未经测试的伪代码,你肯定需要修改它,它只是一个启动器

如果您无法修改加载广告的PHP,也无法修改注入iframe的脚本,那么您就会受到很多冲击。