我的x.php代码如下。这个代码的大概意思是:我用一个网站引用另外一个网站的资源。
我的网站是http://www.123.com 和 http://www.abc.com
如果我输入http://www.123.com/x.php/love.mp3,实际上打开的是
http://www.abc.com/abc/love.mp3。下面代码完全可以实现了。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<?php
 header("content-Type: text/html; charset=Utf-8");
 $SERVER=$_SERVER["REQUEST_URI"];
 preg_match("/php\/([\s\S]+)\.mp3/",$SERVER,$url);
 $urlname=$url[1];
 $downurl='http://www.abc.com/abc/'.$urlname.'.mp3';
 header("location:$downurl");
 ?>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
网页中的播放器可以正常播放http://www.123.com/x.php/love.mp3
后来我加入了防盗链,防下载,代码:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<?php
 header("content-Type: text/html; charset=Utf-8");
 $SERVER=$_SERVER["REQUEST_URI"];
 preg_match("/php\/([\s\S]+)\.mp3/",$SERVER,$url);
 $urlname=$url[1];
 $downurl='http://www.abc.com/abc/'.$urlname.'.mp3';$url       = $_SERVER["HTTP_REFERER"];   //获取完整的来路URL
$str   = str_replace("http://","",$url);  //去掉http://
$strdomain = explode("/",$str);               // 以“/”分开成数组
$domain    = $strdomain[0];              //取第一个“/”以前的字符
if ($domain=="www.123.com"){ header("location:$downurl");}
if ($domain==""){
 header("location:http://www.123.com/daolian.mp3");
}
if ($domain!="www.123.com"){ header("location:http://www.123.com/daolian.mp3");}
 ?>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改完成后,防盗链防下载是实现了,在网页中的播放器播放http://www.123.com/x.php/love.mp3,却播放不了,请问这是代码究竟是什么地方出了问题啊。

解决方案 »

  1.   

    先查一下 $_SERVER["HTTP_REFERER"] 是什么
    用 HTTP_REFERER 判断很不靠谱的
      

  2.   

    最简单的就是传一个加密信息,例如原来是http://www.123.com/x.php/love.mp3,现在改为http://www.123.com/x.php/love.mp3?secret=xxxxxxxxx
    而这个secret是你根据一定的规则生成,外站不好伪造,并且你可以通过验证这个secret是否你本站播放的。 
      

  3.   

    请问下如何生存加密信息啊,secret是如何生成的。就是有http://www.123.com/x.php/love.mp3?secret=xxxxxxxxx,别人讲http://www.123.com/x.php/love.mp3不是还可以下载么?
      

  4.   

    $filename = $_SERVER['SCRIPT_FILENAME']; //获得当前执行脚本的绝对路径根据这个路径在进行判断看看
      

  5.   

    这个问题很有趣,关键还是要看$url       = $_SERVER["HTTP_REFERER"];获取的值。
      

  6.   

    $_SERVER["HTTP_REFERER"]是获取前一页的地址.
    那你就用$_SERVER['HTTP_HOST']来获取当前的域名.
      

  7.   

    我把代码更新为: <?php
     header("content-Type: text/html; charset=Utf-8");
     $SERVER=$_SERVER["REQUEST_URI"];
     preg_match("/php\/([\s\S]+)\.mp3/",$SERVER,$url);
     $urlname=$url[1];
     $downurl='http://www.123.com/'.$urlname.'.mp3';$url = $_SERVER['HTTP_HOST']   //获取完整的来路URL
    $str= str_replace("http://","",$url);  //去掉http://
    $strdomain = explode("/",$str); // 以“/”分开成数组
    $domain= $strdomain[0];  //取第一个“/”以前的字符if ($domain=="www.123.com"){ 
    header("location:$downurl");
    }
    else
    {
    header("location:http://www.123.com/daolian.mp3");
    }
     ?>
    改完之后,是可以起到防盗链防下载的效果。但是在网页中mp3播放不了了。现在正在连接...,正在打开媒体..
    紧接着就是准备就绪了。就是打不开文件的