Защита WordPress изображений от хотлинкинга с .htaccess
Полное руководство по защите изображений WordPress от хотлинкинга с помощью .htaccess. Узнайте, как настроить правила, отладить HTTP_REFERER и решить проблемы с WordPress.
How can I protect WordPress images from being hotlinked while still displaying them on my own site using .htaccess?
I’m trying to implement hotlink protection for my WordPress site at fixogram.ru. I want images to display properly on my own pages, such as:
https://fixogram.ru/posmotreli-film-prostaya-prosba-15-noyabrya-2025/
But I want to prevent them from being displayed on external sites when accessed directly via URLs like:
https://fixogram.ru/wp-content/uploads/2025/11/img_20251115_213955-1024x768.jpg
I’ve tried these .htaccess configurations:
First attempt:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?fixogram\.ru [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://fixogram\.ru [NC,OR]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]
</IfModule>
With this configuration, I cannot see images in either case (on my own site or via direct URL).
Second attempt:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?fixogram\.ru [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://fixogram\.ru [NC,OR]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]
</IfModule>
With this configuration, I can see the image when accessing it directly via URL, but I cannot see it when embedded in my post page.
I suspect that when the post is displayed, the HTTP_REFERER is not set to https://fixogram.ru. How can I debug or view the actual HTTP_REFERER value in Chrome to troubleshoot this issue?
Чтобы защитить изображения вашего WordPress‑сайта от хотлинкинга, вам нужно правильно настроить .htaccess с учётом особенностей HTTP_REFERER и работы WordPress. Основная проблема в ваших конфигурациях заключается в неправильной логике проверки реферера и порядке условий.
Contents
- Основные принципы защиты от хотлинкинга
- Правильная конфигурация .htaccess
- Отладка HTTP_REFERER в Chrome
- Альтернативные методы защиты
- Решение проблем с WordPress
- Интеграция с CDN и прокси
Основные принципы защиты от хотлинкинга
Защита от хотлинкинга работает путем проверки HTTP_REFERER заголовка, который указывает, с какого сайта пришёл запрос на изображение. Когда изображение встраивается на вашем сайте, браузер отправляет HTTP_REFERER с адресом вашей страницы. При прямом доступе к изображению с другого сайта реферер будет содержать адрес этого сайта.
Из исследования на Stack Overflow видно, что главная проблема заключается в том, что «ваша текущая конфигурация переадресации позволяет любому напрямую получить доступ к вашему изображению, введя его URL в адресную строку, и HTTP_REFERER заголовок не будет установлен, что делает первое условие неудачным».
Правильная конфигурация .htaccess
Вот рабочая конфигурация для вашего сайта fixogram.ru:
<IfModule mod_rewrite.c>
RewriteEngine On
# Разрешить доступ при пустом реферере (прямой доступ)
RewriteCond %{HTTP_REFERER} !^$
# Разрешить доступ с вашего сайта
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC]
# Запретить доступ к изображениям с других сайтов
RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]
</IfModule>
Объяснение условий:
RewriteCond %{HTTP_REFERER} !^$– разрешает прямой доступ к изображениям (когда реферер пуст).RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC]– разрешает доступ с вашего сайта.RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]– запрещает доступ к изображениям с других сайтов.
Как отмечено в исследовании от Perishable Press, «критический анализ множества методов позволяет создать оптимальную стратегию защиты от хотлинкинга».
Отладка HTTP_REFERER в Chrome
Чтобы отладить HTTP_REFERER, используйте следующие методы в Chrome:
1. Инструменты разработчика
- Откройте страницу с изображениями.
- Нажмите F12 для открытия инструментов разработчика.
- Перейдите на вкладку «Network» (Сеть).
- Обновите страницу.
- Найдите запрос к изображению в списке.
- Кликните правой кнопкой мыши → «Copy» → «Copy as cURL».
- Посмотрите в скопированном тексте значение
Referer:.
2. Расширения для просмотра заголовков
Установите расширения:
- «Copy All Headers» – показывает все HTTP заголовки.
- «Request Header Inspector» – детальный анализ заголовков.
3. Онлайн‑инструменты для проверки
Используйте сервисы типа:
Как объясняется на WordPress Stack Exchange, «проблема может быть связана с тем, что WordPress сам использует правила переадресации, которые мешают работе вашей защиты».
Альтернативные методы защиты
1. Проверка существования файла
Добавьте проверку на существование файла перед применением правил:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC]
RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]
</IfModule>
2. Разрешение для поисковых систем
Добавьте разрешение для основных поисковых систем:
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?(google|yandex|bing)\.com [NC]
Как рекомендуется в Kinsta блоге, «вы можете сгенерировать более сложные правила с помощью генератора .htaccess для защиты от хотлинкинга».
3. Замена изображения вместо запрета
Вместо запрета отображайте специальное изображение:
RewriteRule \.(jpe?g|png|gif|webp|svg)$ /hotlink-blocked.png [NC,L]
Решение проблем с WordPress
WordPress может конфликтовать с .htaccess‑правилами из‑за своей системы переадресации. Вот как это решить:
1. Проверка порядка правил
Убедитесь, что правила защиты от хотлинкинга находятся после правил WordPress:
# WordPress правила
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# Ваши правила защиты от хотлинкинга
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC]
RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]
</IfModule>
2. Отключение встроенной защиты
Отключите встроенную защиту WordPress в файле wp-config.php:
define('WP_HTTP_BLOCK_EXTERNAL', false);
Как отмечено в Stack Overflow, «проблема в том, что у вас есть правило, которое переадресует все URI в index.php, что мешает работе HTTP_REFERER проверки».
Интеграция с CDN и прокси
Если вы используете Cloudflare или другие CDN‑сервисы, HTTP_REFERER может измениться:
1. Настройка Cloudflare
- В панели управления Cloudflare перейдите в раздел «Scrape Shield».
- Включите опцию «Allow Empty Referrer».
- Или настройте правила в разделе «Rules» → «Transform Rules».
2. Проксирование реферера
Добавьте правила для обработки CDN:
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?cdn\.fixogram\.ru [NC]
Как объясняется в ShortPixel блоге, «для Cloudflare перейдите в панель управления и нажмите на приложение Scrape Shield на правой панели приложений».
Заключение
Для успешной защиты изображений вашего WordPress‑сайта от хотлинкинга:
- Используйте правильную логику условий – сначала проверяйте пустой реферер, затем разрешайте доступ с вашего сайта.
- Проверяйте порядок правил – убедитесь, что правила защиты находятся после правил WordPress.
- Отлаживайте HTTP_REFERER – используйте инструменты разработчика Chrome для проверки реальных значений.
- Учитывайте CDN и прокси – настройте правила для работы с облачными сервисами.
- Тестируйте конфигурацию – создавайте резервные копии .htaccess перед изменениями.
Если проблема persists, попробуйте использовать более комплексные решения или плагины для WordPress, как рекомендовано в Patchstack статье.
Источники
- How to prevent hotlinking with htaccess in Wordpress - WordPress Stack Exchange
- Ultimate htaccess Anti-Hotlinking Strategy - Perishable Press
- How to Prevent Hotlinking in WordPress - Kinsta Blog
- How to Fix Undefined Index Error With HTTP REFERER in WordPress Site
- Prevent Image Hotlinking in WordPress - Patchstack
- 5 Powerful Hacks for Preventing Hotlinking - ShortPixel Blog
- hotlink prevention via htaccess doesn’t work - Stack Overflow