Задать вопрос
@easycode
не боюсь задавать глупые вопросы ))

Как закрыть прямой доступ к файлам в папке через .htaccess, но разрешить если есть ?key=secret?

Нужно запретить прямой URL-доступ к файлам из папки orders на сервере, при этом разрешить доступ по URL'у который содержит определенную GET-переменную key с значением: secret.

Вот к примеру, есть у нас папка orders и в ней файл 1.* - расширение может быть любым, например 1.jpg

Нужно чтобы обращение через /orders/1.jpg - выдавало бы ошибку доступа или переадресацию в 404
И наоборот обращение вида: /orders/1.jpg?key=secret было бы успешным!

Возможно ли такое реализовать с помощью настроек в .htaccess?

p.s.: а в идеале если бы еще можно было secret как-то генерировать - чтобы везде был бы не просто одинаковый ?key=secret, а какой-нить ?key=ХХХХХХХ, где ХХХХХХХ какой-нибудь кэш от имени файла к которому идет обращение.
  • Вопрос задан
  • 1342 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Ariurn
Возьмите отсюда.
Что касательно разных паролей для разных файлов, то через .htaccess такое сделать не получится. Но если речь идёт о программной обработке, то можете создавать пароль путем взятия хэша файла (а не его имени, это не самая лучшая идея). Но я бы на вашем месте ещё использовал соль.
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега htaccess
RewriteCond %{QUERY_STRING} !(^|&)key\=secret($|&)
RewriteRule ^orders/1\..+$ http://test.ru/404.php [L,R=301]


Если нет GET параметра key=secret
То отправить куда-нибудь , например 404.php
Ответ написан
Комментировать
@dodo512
Начиная с Apache 2.4 можно использовать MD5 и SHA1 https://httpd.apache.org/docs/2.4/expr.html#functions
RewriteCond expr "! (%{QUERY_STRING} =~ /(?:^|&)key=([^&]+)/ && md5(%{REQUEST_URI}) == $1)"
RewriteRule ^orders/1\. - [F]

Для /orders/1.jpg хеш MD5 58fa4178ea5e540a0e02f726a807dc8f
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы