Добрый день! Есть файл pesnya.mp3 и есть ссылка на загрузку ../mp3/pesnya.mp3 При клике на ссылку файл успешно скачивается. Также если к файлу обратиться на прямую https://saite.ru/mp3/pesnya.mp3 Он также успешно скачивается. Вопрос как запретить данное действие. Что бы скачать напрямую было не возможно, только с сопутствующей страницы или с новой страницы например download.php
Ну или на уровне сервера (nginx) например ограничить доступ к директории (или файлу) , к которой лежит файл.
На некоторых сайтах видел что то подобное на странице где стоит ссылка прописывается так PHP: define('MY_CONSTANT', TRUE); на на странице загрузки download.php?id=3 PHP: if (!defined('MY_CONSTANT')) exit('No direct script access allowed.'); но не совсем понимаю как это работает
Я могу ошибатся, но что прописано в скрипте, никак не решает проблему описанную Вами в топике темы. Если вы разместили в директории сайта какой нибудь файл, он доступен для всех настолько, насколько это позволяют настройки сервера для этого сайта. Если перейти на прямую урлу этого файла, и нет никаких настроек сервера, ограничвающих хоть как-то досутп к этому файлу, то НЕ вызывается никакой скрипт. Поэтому Вам и посоветовали, если есть возможность, переместить файл из директории сайта. Или же ограничить к нему прямой доступ из-вне путём настроек сервера для этого сайта.
Мне по сути нужно просто скрыть прямой путь что бы защититься от парсинга. Что бы на странице не отображались ссылки или пути к файлу.
Это не для этого. Защита от прямого запуска скриптов там, где даже не предусмотрена возможность убрать скрипты из корня. По реальному ограничению ADSoft ответил. В таком случае достаточно «короткие ссылки» прикрутить. --- Добавлено --- P.S. Парсеры могут резолвить серверный редирект. Наверное, JS-редирект нужно прикрутить.
вам же написали - отдавайте файл через скрипт, не пишите напрямую ссылки принцип такой PHP: // download.php $links = [ '1' => '/images/image1.jpg', '2' => '/images/image123.jpg', ]; if (isset($_GET['link']) && isset($links[$_GET['link']]) { header('Content-Disposition: attachment;filename="' . $links[$_GET['link']].'"'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: cache, must-revalidate'); header('Pragma: public'); echo file_get_content($links[$_GET['link']]); } в html вызывает как HTML: <a href="download.php?link=2">download</a>