Я пытаюсь ограничить прямой доступ к файлам в каталоге. Так, например, у меня есть website.com/files/example.flv.
Поэтому, если пользователи идут прямо в файл в URL-адресе, я хочу, чтобы они были перенаправлены на главную страницу.
Я пробовал использовать htaccess
deny from all
но он не работает отлично. Есть ли способ, которым я мог бы это сделать, используя php, тогда пользователь переходит прямо к файлу в URL-адресе, он будет перенаправлен.
Поэтому, если пользователь переходит к ссылке на файл в URL-адресе, он будет отправлен на главную страницу. Так что это можно сделать только с помощью htaccess
Если вы хотите ограничить доступ к файлам, вам следует рассмотреть возможность их хранения за пределами общедоступного DocumentRoot и с помощью PHP для доставки файла, используя вашу собственную логику доступа. Это означает, что вы не находитесь в папке www или public_html, в зависимости от среды хостинга, с которой вы работаете.
<?php // Suppose your "public_html" folder is . $file = './../data/test.gif'; $userCanDownloadThisFile = false; // apply your logic here if (file_exists($file) && $userCanDownloadThisFile) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=filename.gif'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); }
Да. Вам нужно будет поместить файлы в каталог, который недоступен через Интернет. Затем вам придется создать файл .htaccess в вашей папке public_html / files /, что указывает на ваш php-скрипт.
Что-то вроде этого (примечание: код не проверен):
Состав:
.htaccess:
RewriteEngine on RewriteRule ^/files/(.+)$ filehandler.php?stuff=$1 [QSA]
filehandler.php:
header('Location: /');
Конечно, вы хотите, чтобы файлы были доступны, когда вы хотите, чтобы они обращались к ним. Это можно сделать в файлеhandhand.php, проверив, разрешено ли пользователю просматривать файл, а затем возвращать что-то вроде:
header('Content-type: application/octet-stream'); header('Content-Disposition: inline; filename="'.basename(urlencode($file['name'])).'"'); readfile($dir.basename($file['filename'])); exit;