Привет Итак, у меня есть куча видео, которые пользователи должны видеть только на странице videos.php с тегом html5. Когда вы получаете прямой доступ к файлу 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 часа (в моем случае), что является лазейкой в безопасности.
Спасибо
О, да, проблема здесь, благодаря моему другу, файл будет полностью загружен в оперативную память сервера, то есть, если у вас есть файл размером 20 МБ, все файлы загружаются в оперативную память, а затем передаются пользователю. Если у вас есть 1000 одновременных подключений, у вас не будет оперативной памяти. Любые дополнения на эту тему также приветствуются.
Других решений пока нет …