Редирект на картинку через .htaccess: исправляем ошибку 403
Если вы настраиваете перенаправление запросов с URL вида https://acme.com/fotos/xyz/yourbunnywrote.jpg на скрипт https://acme.com/log.php?src=xyz&img=yourbunnywrote.jpg с помощью файла .htaccess, но получаете ошибку 403 Forbidden, значит, в конфигурации не хватает важных директив. Давайте разберёмся, как правильно организовать такой редирект и избежать блокировки доступа.
Почему возникает ошибка 403 при RewriteRule?
Ошибка 403 (Forbidden) обычно появляется, когда веб-сервер настроен на запрет доступа к определённым файлам или директориям. В вашем случае проблема может быть вызвана тем, что модуль mod_rewrite не включён, или в файле .htaccess отсутствует директива Options +FollowSymLinks, которая необходима для работы перезаписи URL. Кроме того, если на сервере установлены строгие правила безопасности, они могут блокировать выполнение скрипта, на который ведёт редирект.
Исправленный код .htaccess для редиректа на скрипт
Чтобы решить проблему, добавьте недостающие строки и проверьте синтаксис. Вот рабочий вариант:
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
RewriteRule ^fotos/xyz/(.+)$ /log.php?src=xyz&img=$1 [L,R=302]
</IfModule>Обратите внимание на ключевые изменения:
- Options +FollowSymLinks - активирует поддержку символьных ссылок, что часто требуется для работы mod_rewrite.
- R=302 - добавляет временный редирект (HTTP-статус 302). Если нужно постоянное перенаправление, используйте
R=301. - Экранирование амперсанда (&) в RewriteRule не обязательно, но рекомендуется для совместимости.
Проверка включения mod_rewrite на сервере
Если ошибка 403 сохраняется, убедитесь, что модуль mod_rewrite активен. Для этого создайте PHP-файл с кодом <?php phpinfo(); ?> и найдите в выводе строку mod_rewrite. Если его нет, обратитесь к хостинг-провайдеру с просьбой включить модуль. На популярных панелях (cPanel, ISPmanager) это делается через раздел «Модули Apache».
Альтернативный способ: редирект через PHP
Если настройка .htaccess вызывает трудности, можно реализовать перенаправление прямо в скрипте log.php. Например, получить параметры из URL и выполнить редирект на оригинальное изображение:
<?php
$src = $_GET['src'] ?? '';
$img = $_GET['img'] ?? '';
header('Location: https://acme.com/fotos/' . $src . '/' . $img);
exit;
?>Этот метод не требует mod_rewrite, но меняет логику: сначала запрос идёт к скрипту, а потом уже на картинку. Однако для вашей задачи (логирование и редирект) он тоже подходит.
Проверка прав доступа к файлам
Убедитесь, что файл log.php имеет права 644 (владелец может читать и писать, группа и остальные - только читать), а директория, где он расположен - 755. Неправильные права доступа часто вызывают 403. Также проверьте, что файл .htaccess не повреждён: он должен начинаться с точки и не содержать лишних пробелов.
Следуя этим рекомендациям, вы сможете настроить редирект на картинку через скрипт и избавиться от ошибки 403. Если проблема остаётся, проверьте логи сервера (обычно error_log в корне сайта) - там будет указана точная причина блокировки.