Пытаюсь реализовать раздачу файлов из защищённой папки средствами apache по внутреннему запросу через скрипт на php. Nginx использовать не могу по обстоятельствам заказчика. В nginx есть удобное решение моей задачи:
location /dir{
internal;
mp3;
}
Как это можно сделать на apache?
.htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^content/audio/(.*)?$ audio.php?s=%{IS_SUBREQ}&q=$0 [NS]
audio.php
$q =explode('/', $_GET['q']);
$filename = $q[3];
$file = 'audio/'.$filename;
function file_transfer($file) {
if (file_exists($file)) {
if (ob_get_level()) {
ob_end_clean();
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
if ($fd = fopen($file, 'rb')) {
while (!feof($fd)) {
print fread($fd, 1024);
}
fclose($fd);
}
exit;
}else{
echo 'error';
}
}
file_transfer($file);
В плеер подаётся ссылка вида http://domen.ru/content/audio/ffjhgdgg687/song.mp3 По идее название файла надо заменить на id и путь рать из базы, но это детали.
Надо, сделать так, чтоб при переходе по прямой (несуществующей) ссылке скрипт audio.php возвращал ошибку, а при запросе через плеер отдавал файл.
Помогло добавление файла .htacess в папку audio c кодом
<FilesMatch "\.(mp3)$">
Require all denied
</FilesMatch>
По реальному пути http://domen.ru/audio/song.mp3 файл недоступен. Правда осталось придумать, как сделать, чтобы по пути http://domen.ru/content/audio/ffjhgdgg687/song.mp3 файл отдавался только плееру.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, при передаче GET параметров в строке браузера на мой сайт, если таковы содержат пробелы, сервер возвращает:
задача: отправить одним запросом в корзину несколько вариаций товараКак это вижу я: массив значений через POST в обработчик, далее перехватить...