Пользовательский интерфейс, который обеспечивает «официальный» доступ к файлам, имеет аутентификацию пользователя, да, но файлы все еще существуют в каталоге, что не остановит доступ к ним, если они знают URL.
Вам необходимо защитить файлы, используя такую же систему аутентификации, которую вы используете для защиты доступа к пользовательскому интерфейсу. Единственный способ защитить эти ресурсы с помощью IP-адреса ( клиент IP-адрес) - как вы пытаетесь в данный момент в .htaccess
- это если IP-адрес клиента фиксирован и известен заранее (но если это было в этом случае вам не понадобится другая форма аутентификации для начала).
Итак, это будет в первую очередь упражнение на любом языке сценариев / CMS, используемом для аутентификации «пользовательского интерфейса».
То, что вы можете использовать для .htaccess
, - это переписать запросы для этих файлов на ваш серверный скрипт, который обрабатывает аутентификацию, а затем передает файл клиенту после аутентификации.
Например:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^uploads/. /serve-protected-file.php [L]
Любой запрос для /uploads/<something>
(например, /uploads/2020/02/myfile.pdf
), который сопоставляется с действительным файлом, направляется в ваш сценарий: /serve-protected-file.php
.
/serve-protected-file.php
тогда потребуется сделать что-то вроде следующего:
// 1. Parse the file being requested from REQUEST_URI
// 2. Is the requested file "protected"?
// (Serving both protected and public files from the same directory?)
// 3. If not protected then serve/stream the resource to the client. END
// 4. If protected then authenticate the user...
// 5. If user authenticated then serve/stream the resource to the client. END
// 6. Resource is protected and user not authenticated...
// Serve a 403 Forbidden. END
(В идеале расположение этих «защищенных» ресурсов должно быть полностью вне документа root - поэтому они по умолчанию являются «частными» - и URL-адрес, который пользователь использует для доступа к этим ресурсам, полностью виртуален - тогда вам, вероятно, не потребуется никакого дополнительного кодирования в .htaccess
, и все будет реализовано вашим фронт-контроллером - но все зависит от того, как реализован ваш сайт и способ маршрутизации URL.)