Диагностика проблемы: почему нужен запрет доступа к файлам в медиабиблиотеке
В медиабиблиотеке WordPress хранятся все загруженные изображения, документы и медиафайлы, которые по умолчанию доступны по прямым ссылкам. Иногда возникает задача ограничить доступ к этим файлам — например, чтобы скрыть их от индексации поисковиками, закрыть доступ для неавторизованных пользователей или предотвратить прямой хотлинкинг.
Проверить, открывается ли файл напрямую, можно, вставив URL файла в браузере. Если файл загружается без авторизации — проблема подтверждена.
Базовое решение: запрет прямого доступа через .htaccess
В корневой папке wp-content/uploads можно добавить или изменить файл .htaccess для ограничения доступа. Вот простой пример, запрещающий доступ ко всем файлам по прямой ссылке, кроме случаев, когда запрос идет с вашего сайта:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|pdf|docx)$ - [F,NC]
Замените example.com на домен вашего сайта. Этот код блокирует прямой доступ ко всем файлам с расширениями jpg, png, gif, pdf, docx, если запрос пришёл не с вашего сайта (например, с другого сайта, пытающегося встраивать ваши файлы).
Как сделать защиту от неавторизованных пользователей
Если требуется запретить доступ к файлам из медиатеки всем, кто не авторизован в WordPress, можно использовать следующий код в wp-content/uploads/.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^.*$ - [F,L]
Этот код проверяет наличие куки авторизации WordPress. Если пользователь не залогинен, доступ к любым файлам будет запрещён.
Пошаговое руководство по внедрению
- Подключитесь к серверу по FTP или через файловый менеджер хостинга.
- Перейдите в папку
wp-content/uploads. - Если файла
.htaccessнет — создайте его. Если есть — откройте для редактирования. - Вставьте один из предложенных выше блоков кода, в зависимости от задачи.
- Сохраните изменения и загрузите файл обратно на сервер.
- Очистите кэш сайта и браузера.
Проверка результата
- Попробуйте открыть напрямую URL любого файла из медиатеки в браузере в режиме инкогнито.
- Если включена защита по рефереру, попробуйте открыть файл с другого сайта или из поисковика — доступ должен быть запрещён.
- Если включена защита по авторизации, попробуйте открыть файл без входа в WordPress — должна появиться ошибка 403 Forbidden.
Частые ошибки и как их исправить
- Файл .htaccess игнорируется сервером. Проверьте, что на сервере включен модуль
mod_rewrite(для Apache) и разрешено использование .htaccess. Для Nginx нужно настроить правила в конфигурации сервера. - Сайт перестал загружать изображения. Проверьте правильность пути и синтаксиса в .htaccess. Возможно, ограничения слишком жёсткие и блокируют легитимные запросы.
- Пользователи неавторизованные всё равно видят файлы. Проверьте наличие и правильность куки
wordpress_logged_in_в запросах. Иногда плагины безопасности могут изменять куки, что ломает проверку.
Практические советы по безопасности и производительности
- Используйте минимально необходимые правила. Например, если нужно блокировать только хотлинкинг, не применяйте запреты для авторизованных пользователей.
- Для сайтов с большой медиатекой и высокой нагрузкой лучше настроить защиту на уровне CDN или сервера, а не через .htaccess, чтобы не замедлять загрузку.
- Регулярно проверяйте файл
.htaccessна предмет конфликтов с другими правилами, особенно если используете плагины кеширования или безопасности.
Таблица сравнения вариантов защиты медиабиблиотеки
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Защита по HTTP_REFERER | Простая, блокирует хотлинкинг | Реферер можно подделать; не защищает от прямого доступа | RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC] |
| Защита по куки авторизации | Защищает от неавторизованных | Нужна правильная проверка кук; не работает при отключенных куках | RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$ |
| Настройка на уровне сервера/CDN | Быстрая и гибкая | Требует доступа к серверу или CDN настройкам | Правила в Nginx или Cloudflare |