嗨,所以我有一堆视频,用户应该只能在带有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。关于这一主题的任何补充也将不胜感激。