Используйте htaccess, чтобы разрешить загрузку файлов только в том случае, если пользовательский агент относится к определенному типу.

У меня есть папка с несколькими zip-файлами. Я хочу отклонить все запросы на их загрузку напрямую, если только пользовательский агент не относится к указанному мной типу (например, пользовательский агент: myuseragent)

Как это возможно с файлом .htaccess?

Отклоненные запросы будут перенаправлены в индексный файл, а принятые запросы будут загружать файл.

например. если пользователь попытается открыть http://download.com/files/myfile.zip, он будет отклонен но если скрипт с пользовательским агентом «myuseragent» получит доступ к тому же URL-адресу, он загрузит файл

Я понимаю, что юзерагенты могут быть подделаны. Это лишь легкая защита от свободного доступа к файлам.


person CommentLuv    schedule 25.08.2011    source источник
comment
Приведите пример такого URL-адреса загрузки.   -  person LazyOne    schedule 26.08.2011
comment
Имейте в виду, что можно подделать user-agent. Например, curl -A и wget -U делают это. В Safari, если вы включите меню «Разработка», вы можете выбрать свой собственный пользовательский агент. В Firefox используйте about:config.   -  person lhf    schedule 26.08.2011


Ответы (1)


Вот как это можно сделать с помощью .htaccess и mod_rewrite:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule ^files/.*$ - [F,L]

Приведенное выше правило предписывает Apache выдавать ответ 403 Access Denied для любого файла в папке /files/, если пользовательский агент не равен myuseragent.

Если вы хотите выдать ответ 404 File Not Found, замените [F,L] на [R=404,L].

Если вы хотите перенаправить такие неудачные запросы на домашнюю страницу, используйте это правило (вы можете изменить перенаправление с 302 на любой другой код перенаправления, который вам нравится):

RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule ^files/.*$ / [R=302,L]
person LazyOne    schedule 25.08.2011
comment
Я поместил это в файл .htaccess в папку с именем /files/, и он разрешил загрузку любого файла из любого пользовательского агента. - person CommentLuv; 26.08.2011
comment
Правило предполагалось разместить в .htaccess в корневой папке сайта. Если ставить в /files/.htaccess, то нужно немного изменить правило - убрать часть files/ и вместо / поставить полное доменное имя. Это также зависит от того, как вы написали строку пользовательского агента - содержит ли она пробелы с учетом регистра? Пожалуйста, укажите, что именно вы сделали (на случай, если вышеуказанные исправления не сработают). - person LazyOne; 26.08.2011