.htaccess .mp4热链接移动视频无法播放


.htaccess .mp4 hotlinking mobile video doesn't play

嗨,所以我有一堆视频,用户应该只能在带有html5标签的视频.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]

如果有人能帮助我理解为什么视频不播放热链接,我将不胜感激!

因此,在尝试了所有方法之后,我找到了解决问题的方法。我没有使用.htaccess,而是做了以下事情:

为您的视频创建一个唯一的文件夹名称,例如KV93BGYFQW9024J,因此 URL 将是视频:(可能您可以每天重新创建它,将其保存在数据库中作为参考)

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。关于这一主题的任何补充也将不胜感激。