Назад | Перейти на главную страницу

Как отключить горячие ссылки и прямые ссылки на файлы на моем сайте?

Хорошо, вот уже несколько часов я бью головой об стену, и это просто не работает. Ниже представлено содержимое моего файла .htaccess. Я пытаюсь заблокировать доступ к набору файлов pdf и mp3 на моем сайте, если пользователь не перейдет к этим файлам по ссылкам на страницах моего сайта.

Куда бы я ни посмотрел, код в основном такой же, как и тот, что я использую, но он просто не работает. Мои вопросы:

1) Я что-то не так делаю? 2) Если нет, то как мне отладить это?

# BEGIN CustomRedirects
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(mp3|pdf)$ - [F,NC,L]
# END CustomRedirects

Файлы mp3 и pdf не чувствительны к регистру, и включен mod_rewrite. На моем сайте установлен Wordpress, но он находится в более высоком каталоге в дереве, чем этот файл .htaccess. Из документации у меня сложилось впечатление, что мой файл .htaccess должен иметь приоритет, потому что он находится в каталоге, в котором я хочу выполнить эту перезапись. Если я испорчу этот файл .htaccess достаточно плохо, я получу ошибку 500, поэтому я могу только предположить, что он читается в какой-то момент.

Я также пробовал следующее, что я нашел из другого вопроса о сбое сервера, и это тоже не сработало:

SetEnvIf Referer . hotlink=1
SetEnvIfNoCase Referer ^http://(www\.)?mydomain\.com/.*$ !hotlink
<LocationMatch *.pdf>
      Order allow,deny
      Deny from env=hotlink
      Allow from all
</LocationMatch>

У кого-нибудь есть идеи?

Обновить: Я также пробовал следующее для RewriteRule, но безрезультатно.

RewriteRule .*\.(mp3|pdf)$ - [F,NC,L]

Я обнаружил, что если я оставлю RewriteCond %{HTTP_REFERER} !^$ часть, он работает нормально, за исключением того факта, что кто-то все еще может ввести URL напрямую и перейти к файлам. Это еще кое-что, что я хотел бы предотвратить.

Проблема с первым отрывком может заключаться в строке RewriteRule.

Где у вас есть:

RewriteRule \.(mp3|pdf)$ - [F,NC,L]

возможно вы хотите:

RewriteRule .*\.(mp3|pdf)$ - [F,NC,L]

Как есть, я думаю, вы сопоставляете конкретные файлы «.mp3» или «.pdf». Вы хотите сопоставить 'foo.mp3' или 'bar.pdf' (для различных foo и bar).

По второму отрывку .. Начало выглядит подозрительно. Не знаю, зачем вам комбинация SetEnvIf и SetEnvIfNoCase. Возможно, попробуйте что-то вроде этого:

SetEnvIf Referer "^http://(www\.)?mydomain.com/.*$" legit_referal
SetEnvIf Referer "^$" legit_referal
<LocationMatch "\.(pdf|mp3)$" >
   Order Deny,Allow
   Deny from all
   Allow from env=legit_referal
</LocationMatch>

То, что вы описываете, определенно возможно. Вы можете легко вернуть 403 запрещенный статус, если реферер не соответствует вашему собственному домену.

Вы также можете рассмотреть этот вариант: http://www.alistapart.com/articles/hotlinking/

Что касается вашего текущего кода, я заметил, что вы по ошибке пропустили обратную косую черту \, чтобы избежать. в mydomain.com.