.htaccess — htaccess: запретить все PDF-файлы, но разрешить из php-скрипта (скрипт загрузки файлов)

Я написал небольшой скрипт загрузки, чтобы скрыть путь к файлу, файл «get_file.php» обрабатывает все.
Следующим шагом я хотел бы запретить с помощью htaccess все pdf-файлы из прямого доступа через браузер (если кто-либо знает точный URL-адрес файла), но все же предоставить доступ к файлу с помощью моего «get_file.php».

Я старался:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteRule \.(pdf)$ - [F]

есть идеи?

3

Решение

Попробуйте это правило в верхней части вашего .htaccess:

RewriteEngine on

RewriteCond %{THE_REQUEST} \.pdf[?\s] [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteRule ^ - [F]
4

Другие решения

Просто попробуйте это:

get_file.php

<?php
// You can add extra codes to get your pdf file name here
$file = 'file.pdf';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
2

1-й шаг — htaccess — я обычно использую FilesMatch разными способами:

<FilesMatch "\.pdf$">
Order allow,deny
Deny from all
</FilesMatch>

2-й шаг в вашем PHP-файле — вам нужно просто использовать локальный путь для его загрузки и отображения.
/path/to/file.pdf
Вот примеры, как экспортировать это для клиентов: правильные заголовки PHP для загрузки pdf файла

1
По вопросам рекламы [email protected]