Другое

Защита 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:

apache
<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:

apache
<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

Основные принципы защиты от хотлинкинга

Защита от хотлинкинга работает путем проверки HTTP_REFERER заголовка, который указывает, с какого сайта пришёл запрос на изображение. Когда изображение встраивается на вашем сайте, браузер отправляет HTTP_REFERER с адресом вашей страницы. При прямом доступе к изображению с другого сайта реферер будет содержать адрес этого сайта.

Из исследования на Stack Overflow видно, что главная проблема заключается в том, что «ваша текущая конфигурация переадресации позволяет любому напрямую получить доступ к вашему изображению, введя его URL в адресную строку, и HTTP_REFERER заголовок не будет установлен, что делает первое условие неудачным».


Правильная конфигурация .htaccess

Вот рабочая конфигурация для вашего сайта fixogram.ru:

apache
<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>

Объяснение условий:

  1. RewriteCond %{HTTP_REFERER} !^$ – разрешает прямой доступ к изображениям (когда реферер пуст).
  2. RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC] – разрешает доступ с вашего сайта.
  3. RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L] – запрещает доступ к изображениям с других сайтов.

Как отмечено в исследовании от Perishable Press, «критический анализ множества методов позволяет создать оптимальную стратегию защиты от хотлинкинга».


Отладка HTTP_REFERER в Chrome

Чтобы отладить HTTP_REFERER, используйте следующие методы в Chrome:

1. Инструменты разработчика

  1. Откройте страницу с изображениями.
  2. Нажмите F12 для открытия инструментов разработчика.
  3. Перейдите на вкладку «Network» (Сеть).
  4. Обновите страницу.
  5. Найдите запрос к изображению в списке.
  6. Кликните правой кнопкой мыши → «Copy» → «Copy as cURL».
  7. Посмотрите в скопированном тексте значение Referer:.

2. Расширения для просмотра заголовков

Установите расширения:

  • «Copy All Headers» – показывает все HTTP заголовки.
  • «Request Header Inspector» – детальный анализ заголовков.

3. Онлайн‑инструменты для проверки

Используйте сервисы типа:

Как объясняется на WordPress Stack Exchange, «проблема может быть связана с тем, что WordPress сам использует правила переадресации, которые мешают работе вашей защиты».


Альтернативные методы защиты

1. Проверка существования файла

Добавьте проверку на существование файла перед применением правил:

apache
<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. Разрешение для поисковых систем

Добавьте разрешение для основных поисковых систем:

apache
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?(google|yandex|bing)\.com [NC]

Как рекомендуется в Kinsta блоге, «вы можете сгенерировать более сложные правила с помощью генератора .htaccess для защиты от хотлинкинга».

3. Замена изображения вместо запрета

Вместо запрета отображайте специальное изображение:

apache
RewriteRule \.(jpe?g|png|gif|webp|svg)$ /hotlink-blocked.png [NC,L]

Решение проблем с WordPress

WordPress может конфликтовать с .htaccess‑правилами из‑за своей системы переадресации. Вот как это решить:

1. Проверка порядка правил

Убедитесь, что правила защиты от хотлинкинга находятся после правил WordPress:

apache
# 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:

php
define('WP_HTTP_BLOCK_EXTERNAL', false);

Как отмечено в Stack Overflow, «проблема в том, что у вас есть правило, которое переадресует все URI в index.php, что мешает работе HTTP_REFERER проверки».


Интеграция с CDN и прокси

Если вы используете Cloudflare или другие CDN‑сервисы, HTTP_REFERER может измениться:

1. Настройка Cloudflare

  1. В панели управления Cloudflare перейдите в раздел «Scrape Shield».
  2. Включите опцию «Allow Empty Referrer».
  3. Или настройте правила в разделе «Rules» → «Transform Rules».

2. Проксирование реферера

Добавьте правила для обработки CDN:

apache
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?cdn\.fixogram\.ru [NC]

Как объясняется в ShortPixel блоге, «для Cloudflare перейдите в панель управления и нажмите на приложение Scrape Shield на правой панели приложений».


Заключение

Для успешной защиты изображений вашего WordPress‑сайта от хотлинкинга:

  1. Используйте правильную логику условий – сначала проверяйте пустой реферер, затем разрешайте доступ с вашего сайта.
  2. Проверяйте порядок правил – убедитесь, что правила защиты находятся после правил WordPress.
  3. Отлаживайте HTTP_REFERER – используйте инструменты разработчика Chrome для проверки реальных значений.
  4. Учитывайте CDN и прокси – настройте правила для работы с облачными сервисами.
  5. Тестируйте конфигурацию – создавайте резервные копии .htaccess перед изменениями.

Если проблема persists, попробуйте использовать более комплексные решения или плагины для WordPress, как рекомендовано в Patchstack статье.

Источники

  1. How to prevent hotlinking with htaccess in Wordpress - WordPress Stack Exchange
  2. Ultimate htaccess Anti-Hotlinking Strategy - Perishable Press
  3. How to Prevent Hotlinking in WordPress - Kinsta Blog
  4. How to Fix Undefined Index Error With HTTP REFERER in WordPress Site
  5. Prevent Image Hotlinking in WordPress - Patchstack
  6. 5 Powerful Hacks for Preventing Hotlinking - ShortPixel Blog
  7. hotlink prevention via htaccess doesn’t work - Stack Overflow
Авторы
Проверено модерацией
Модерация