Диагностика проблемы: почему видео доступны всем
В стандартной установке WooCommerce и WordPress видеофайлы, добавленные в описания товаров или на страницы, доступны всем посетителям, включая неавторизованных пользователей. Это становится проблемой, если вы продаёте видеоконтент или обучающие видео и хотите ограничить доступ только для клиентов, которые приобрели товар или хотя бы авторизовались.
Типичные признаки проблемы:
- Видео воспроизводятся без входа на сайт
- Ссылки на видео доступны по прямым URL
- Отсутствует проверка прав доступа перед показом видео
Пошаговое решение: ограничение доступа к видео в WooCommerce
1. Проверка авторизации пользователя перед показом видео
Добавьте проверку авторизации в шаблон вывода видео. Например, если видео вставлено через шорткод или в описании товара, создайте кастомный шорткод, который будет проверять, залогинен ли пользователь.
function protected_video_shortcode($atts, $content = null) {
if ( is_user_logged_in() ) {
return do_shortcode($content);
} else {
return '<p>Для просмотра видео необходимо <a href="' . wp_login_url() . '">войти</a> на сайт.</p>';
}
}
add_shortcode('protected_video', 'protected_video_shortcode');Используйте шорткод в описании товара или на странице так:
[protected_video]<video src="https://example.com/video.mp4" controls></video>[/protected_video]2. Ограничение доступа к видеофайлам по URL
Важно не только скрыть видео на фронтенде, но и защитить прямые ссылки. Для этого рекомендуем использовать защиту с помощью .htaccess и PHP.
Вариант с проверкой реферера в .htaccess (работает на Apache):
<FilesMatch "\.(mp4|mov|avi)$">
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https://yourdomain\.ru/ [NC]
RewriteRule .* - [F]
</FilesMatch>Плюс добавить PHP-скрипт-прокси для выдачи видео, где проверяется авторизация пользователя:
if ( !is_user_logged_in() ) {
status_header(403);
exit('Доступ запрещён');
}
// Далее отдаем файл видео с помощью readfile или X-SendfileПроверка результата после внедрения
- Откройте страницу с видео в режиме гостя (без входа) — видео должно быть скрыто с сообщением о необходимости авторизации
- Попробуйте перейти по прямой ссылке на видео — доступ должен быть запрещён или возвращён 403
- Войдите под пользователем — видео должно отображаться и воспроизводиться корректно
Частые ошибки и как их исправить
- Видео все равно доступны гостям: Проверьте, что все места вывода видео используют шорткод или функцию проверки авторизации. Не все плагины автоматически применяют ограничения.
- Прямые ссылки не защищены: Настройте серверную защиту через
.htaccessили реализуйте выдачу видео через PHP с проверкой сессии. - Ошибка 500 после правок .htaccess: Проверьте синтаксис файла и логи сервера, ошибки в RewriteRule часто вызывают проблемы.
- Видео не воспроизводится у авторизованных: Проверьте правильность URL и права доступа, убедитесь, что видеофайлы не повреждены.
Практические советы по безопасности и производительности
- Используйте
X-Sendfile(Apache) илиX-Accel-Redirect(Nginx) для отдачи защищённых видеофайлов через PHP — это значительно снизит нагрузку на сервер. - Кэшируйте проверки авторизации на стороне сервера, чтобы не выполнять их при каждом запросе видео.
- Регулярно обновляйте WooCommerce и WordPress, чтобы избежать уязвимостей в безопасности.
- Если используете сторонние CDN для видео, настройте приватные ссылки или токены доступа.
Сравнение подходов ограничения доступа к видео
| Метод | Преимущества | Недостатки |
|---|---|---|
| Шорткод с проверкой авторизации | Простая реализация, подходит для контента в постах | Не защищает прямые ссылки на видео |
| Защита через .htaccess (реферер) | Блокирует прямой доступ по URL | Реферер можно подделать, не полностью безопасно |
| Отдача видео через PHP с проверкой сессии | Максимальная безопасность, полный контроль доступа | Нагрузка на сервер выше, сложнее реализовать |