.htaccess .mp4 hotlinking移动视频无法播放

时间:2015-02-03 10:28:54

标签: php html5 .htaccess hotlinking

嗨所以我有一堆视频用户应该只能在带有html5标签的videos.php页面上看到。当您直接访问mp4文件时,它应该将您重定向到主页。使用下面的代码可以正常工作。

我使用了这段代码:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC]
RewriteRule \.(mp4)$ - [NC,F,L]

然而,在任何移动设备上,重定向都有效,但是一旦我实施了新规则,视频就停止了播放。所以我从某个地方发现了这个代码,希望它可以工作:

# for android/ipad/iphone/BlackBerry/Nokia/Samsung/Windows Phone
RewriteCond %{HTTP_USER_AGENT} !(Android|iPad|iPhone|BlackBerry|Nokia|SAMSUNG|Windows\ Phone)

仍然没有运气,移动和桌面上的热链接工作除了移动视频文件不播放。我已恢复原始代码:

RewriteEngine on   

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC]
RewriteRule \.(mp4|jpg|gif)$ - [NC,F,L]

如果有人可以帮助我理解为什么视频没有使用热链接,我会很感激!

1 个答案:

答案 0 :(得分:0)

因此,在尝试了所有内容之后,我找到了解决问题的方法。我没有使用.htaccess,而是执行了以下操作:

为您的视频创建唯一的文件夹名称。例如KV93BGYFQW9024J所以网址将是视频:(可能你每天都可以重新创建它,并将其保存在数据库中作为参考)

mydomain.com/KV93BGYFQW9024J/video.mp4

现在创建一个如下所示的php文件:

<?php
        $video = "video.mp4" //Video name can be retrieved from database using a token passed to this page

    $auth=true; // Authentication can be done here;

    if($auth){
        $path = "KV93BGYFQW9024J/";
        header("Content-type: video/mp4");
        header("Content-Length: ".filesize($path)); // provide file size
        header("Expires: -1");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        readfile($path);
    }else{
        echo "Not Authenticated";
    }
?>

然后最后在实际页面上你可以拥有这个

<video id="example_video_1" controls preload="none" autoplay="false" >
      <source src="video.php?id=ISHF298YFGY25H01" type='video/mp4' />  
</video>

令牌应该引用视频的名称。我知道这只是一次甩开,但有助于避免偷偷摸摸的用户嗅出其他视频。所有你都无法在没有身份验证的情况下直接访问视频,如果你设法抓住文件夹,你可以随机重新生成名称,每1-12小时取决于视频长度。

如果有人能给我一个更好的解决方案,我们将不胜感激。这将有助于现在我仍然看到文件夹,即使每2小时(在我的情况下)随机生成的名称是一个安全漏洞。

由于

哦,是的问题在这里感谢我的朋友,文件将完全加载到服务器ram中,这意味着如果你有一个20mb的文件,整个文件加载到ram然后流传输到用户。如果你有1000个并发连接,你就会用完ram。关于这个主题的任何补充也将受到赞赏。