Я работаю над решением проблемы, при которой пользователи потенциально могут получить доступ к изображениям (в данном случае к файлам PDF), хранящимся в папке вне корня сервера. Обычно мое приложение проверяет пользователей с помощью сценариев и сеансов PHP. Что не происходит прямо сейчас, так это предотвращение возможности доступа незарегистрированных пользователей к файлам PDF.
Решение, которое я ищу, (я думаю) должно быть связано с Apache. Я видел интересное решение с использованием RewriteMap и RewriteRule, однако в примере использовалось размещение этого в файле .htaccess в каталоге PDF. Невозможно сделать это с Apache (ошибка: RewriteMap здесь не допускается). Я считаю, что директивы перезаписи должны быть в моем httpd.conf, к которому у меня есть доступ.
Итак, пример, который я нашел (который привел к «rewritemap not allowed here»), находится здесь:
RewriteEngine On
RewriteMap auth prg:auth.php
RewriteRule (.*) ${auth:$1}
auth.php просто проверяет сеанс PHP и при необходимости перенаправляет на сценарий входа.
Я читаю, что мне нужно поместить это в свой httpd.conf. Как мне указать, что RewriteMap должен появляться только в определенном каталоге (включая подкаталоги)?
Я бы, наверное, справился с этим, используя RewriteRule вместо RewriteMap. Создайте правило mod_rewrite, которое перенаправляет запросы pdf в файл php
RewriteEngine on
RewriteRule ^(.*\.pdf)$ /path/to/auth.php?i=$1
Затем вы можете настроить auth.php для аутентификации сеанса и вывода фактического содержимого PDF-файла. Я сделал то же самое, используя файлы RewriteRule и jpg.
RewriteRule ^([^thumb].*\.[jJ].*)$ /auth.php.php?i=$1
Затем я использую auth.php для изменения изображения на основе сеанса и других факторов, а затем возвращаю его клиенту. Например:
$last_modified = gmdate('D, d M Y H:i:s T', filemtime ($image));
header("Last-Modified: $last_modified");
header("Content-Type: image/jpeg");
imagejpeg($image,NULL,95);
Вы также можете делать некоторые интересные вещи, такие как добавление уникального водяного знака и любую другую обработку, которую вы хотите на изображении, и я подозреваю, с функциями записи в файле PDF.
Вы можете заключить эти директивы в любой <Location /directory>
блок (если вы хотите сопоставить URI) или <Directory /var/www/html/directory>
блок (если вы хотите сопоставить путь файловой системы).
Или вы можете просто изменить часть рисунка RewriteRule
чтобы соответствовать только желаемому пути URI:
RewriteRule (^/directory.*) ${auth:$1}