Файлы из папки только по внутреннему запросу через Apache

181
28 марта 2018, 06:30

Пытаюсь реализовать раздачу файлов из защищённой папки средствами 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 возвращал ошибку, а при запросе через плеер отдавал файл.

Answer 1

Помогло добавление файла .htacess в папку audio c кодом

<FilesMatch "\.(mp3)$">
    Require all denied
</FilesMatch>

По реальному пути http://domen.ru/audio/song.mp3 файл недоступен. Правда осталось придумать, как сделать, чтобы по пути http://domen.ru/content/audio/ffjhgdgg687/song.mp3 файл отдавался только плееру.

READ ALSO
Nginx/Apache веб сервер, Rewrite GET запрос

Nginx/Apache веб сервер, Rewrite GET запрос

Здравствуйте, при передаче GET параметров в строке браузера на мой сайт, если таковы содержат пробелы, сервер возвращает:

202
woocommerce обработчик отправки в корзину

woocommerce обработчик отправки в корзину

задача: отправить одним запросом в корзину несколько вариаций товараКак это вижу я: массив значений через POST в обработчик, далее перехватить...

178
Как пропустить массив в запрос MySQLi?

Как пропустить массив в запрос MySQLi?

Есть следующий запрос:

208