本帖最后由 wapasp 于 2011-07-08 11:40:58 编辑

解决方案 »

  1.   

    因为这个“来路”是浏览器提供的,所以,你在php文件上下功夫是没用的。
    倒是有种思路你可以考虑下:B.php不做跳转,而是用socket模拟浏览器,读取C.php的内容,再展示给客户,这样,你就可以自由设定“来路”了。
      

  2.   

    或者可以试试用javascript获取来路,然后赋值给php变量.
      

  3.   

    你在B.php上也按照A的写法链接到C。或者用js跳转也可以。
     echo "<script>window.location.href='C.php';</script>";试试看。
      

  4.   


    这个也不行的,这样还是检查到来路是B.php了。
      

  5.   

    可以使用cookie记录来源网址,设置一个字段,在跳转页利用这个字段,就是来源了,然后再页面清除这个cookie字段,这种方法用在重定向的比较好,其他的非重定向直接用$_SERVER["HTTP_REFERER"]就好了你看看可以吗?A.php:
    <?php
    header("Content-Type: text/html; charset=GB2312");
    echo "<a href='B.php' target='_blank'>B.php</a><br />";
    ?>B.php:
    <?php
    header("Content-Type: text/html; charset=GB2312");
    //PRINT_R($_SERVER);//当前页的url地址,设置为cookie中
    $nowurl='http://'.$_SERVER['SERVER_ADDR'].$_SERVER['PHP_SELF'];//设置cookie中,记录当前页的地址,当跳转到其他可以用这个$_cookie['referer']取来源地址,然后赋给$_SERVER["HTTP_REFERER"]或直接输出$_cookie['referer'],就可以得到来源页的url
    setcookie('referer',$nowurl);header("Location: C.php");
    ?>
    C.php:<?php
    header("Content-Type: text/html; charset=GB2312");//print_r($_COOKIE);
    //cookie中设置了来源字段
    if(isset($_COOKIE['referer'])){
    $_SERVER["HTTP_REFERER"]=$_COOKIE['referer'];setcookie('referer','',time()-3600);//清除来源cookie
    }else $_SERVER["HTTP_REFERER"]='';//不存在来源,设置为空
    echo '来源url:'.$_SERVER["HTTP_REFERER"]; ?>
      

  6.   

    有个问题:为什么重定向$_SERVER["HTTP_REFERER"]是a.php,而不是b.php呢,怎么回事啊
      

  7.   

    我理解错了。我还以为你要检测到B。你是从B跳转过去的。当然检测到来路是B啦。除非你把A传到C,这样:
    B.php
    <?php
    header("Content-Type: text/html; charset=GB2312");header("Location: C.php?a=".$_SERVER["HTTP_REFERER"]);
    ?>
    C.php
    <?php
    header("Content-Type: text/html; charset=GB2312");
    echo $_GET['a'];  
    ?>
      

  8.   

    本帖最后由 xuzuning 于 2011-07-08 14:11:16 编辑
      

  9.   

    echo "<script>window.open("C.php","","");</script>";
    这样可以么?
      

  10.   

    <button onclick="aaa">跳转</button>
    <script>
          function aaa(){
               location.href="c.html";
          }
    </script>
      

  11.   

    谢谢大家回复的,问题仍是没得到解决。用JS跳转对谷歌浏览器无效,而对IE浏览又是出现阻止弹窗。再注明一下,实际C.php是比如跳转到其它网站的URL网址,我的目的就是要让目标URL网址中无法检查到来路,因为对方检查来路不是他们网址就不能访问。
      

  12.   

    这是常见的盗链与反盗链的问题,解决办法通常是在自己网站的B.php内构造HTTP请求然后通过socket发给C.php所在的网站,在请求头内通过Referer: http://www.C网站.com/这行来告诉C网站的C.php:请求是从C网站首页链接过来的。然后把获取到的网页内容去掉HTTP头后转发给用户。
      

  13.   


    是这样的,B.php用curl取得C链接,怎么在B页面跳转链接打开C链接:header("Location: C链接");要让C链接页面不能判断到来路。