15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
23.10.2024

8 способов исправить ошибку 403 Forbidden на вашем сайте

Ошибка 403 Forbidden — это HTTP-код состояния, возвращаемый веб-сервером, когда он понимает запрос клиента, но активно отказывается его выполнять из-за недостаточных прав доступа. В отличие от ошибки 404 (ресурс не найден), ошибка 403 подтверждает, что ресурс существует — сервер просто не разрешает к нему доступ. Это различие крайне важно при диагностике первопричины.

Ошибка может возникать на десятке различных уровней: права доступа к файловой системе, директивы .htaccess, блоки конфигурации на уровне сервера, правила запрета IP, политики CDN или WAF, или даже неисправный плагин WordPress. Это руководство охватывает все значимые способы устранения в порядке вероятности, с точными командами, фрагментами конфигурации и крайними случаями, которые большинство руководств полностью упускают.

Что вызывает ошибку 403 Forbidden

Прежде чем применять какое-либо исправление, полезно понять дерево решений, которому следует веб-сервер. Когда Apache или NGINX получает запрос, он оценивает:

  1. Права доступа к файловой системе — имеет ли пользователь серверного процесса право на чтение файла?
  2. Владелец — принадлежит ли файл правильному пользователю (обычно www-data, apache или nginx)?
  3. Директивы конфигурации сервера — явно ли запрещают доступ блоки <Directory>, <Location> или server {}?
  4. Правила .htaccess — переопределяют ли директивы Deny, Require или Options настройки по умолчанию?
  5. Правила на уровне приложения — перехватывает ли запрос плагин CMS, WAF или модуль безопасности?
  6. Блокировки на уровне IP — находится ли запрашивающий IP-адрес в списке запрещённых?

Определение ответственного уровня вдвое сокращает время устранения неполадок.

Исправление 1: Корректировка прав доступа к файлам и каталогам

Неверные права доступа UNIX — наиболее распространённая причина ошибок 403 в средах общего и VPS-хостинга. Процесс веб-сервера должен иметь как минимум права на чтение (r) файлов и права на чтение + выполнение (rx) для каждого каталога в пути к запрашиваемому ресурсу.

Стандартные значения прав доступа:

Тип ресурсаВосьмеричныйСимвольныйЗначение
Обычные файлы644-rw-r--r--Владелец: чтение/запись; Группа/Остальные: чтение
PHP/скрипт-файлы644-rw-r--r--Никогда 755, если явно не требуется
Каталоги755drwxr-xr-xВладелец: полный доступ; Группа/Остальные: чтение+выполнение
Конфиденциальные файлы конфигурации600-rw-------Только владелец
WordPress wp-config.php640-rw-r-----Владелец + чтение группой; без доступа для остальных

Важный крайний случай: Если в любом родительском каталоге пути отсутствует право на выполнение (x) для пользователя сервера, каждый файл внутри него будет возвращать ошибку 403 — даже если сам файл имеет правильные права доступа. Всегда проверяйте весь путь, а не только целевой файл.

Для рекурсивного исправления прав доступа через SSH:

# Fix directory permissions
find /var/www/html -type d -exec chmod 755 {} ;

# Fix file permissions
find /var/www/html -type f -exec chmod 644 {} ;

# Fix ownership (replace www-data with your server user)
chown -R www-data:www-data /var/www/html

Для проверки эффективного пользователя, от имени которого работает ваш веб-сервер:

ps aux | grep -E 'apache|nginx|httpd' | grep -v grep | awk '{print $1}' | sort -u

Если вы используете план VPS-хостинга с root-доступом, вы можете выполнять эти команды напрямую. На общем хостинге используйте файловый менеджер панели управления или FTP-клиент, например FileZilla: щёлкните правой кнопкой мыши на файле или каталоге и выберите «Изменить права доступа».

Исправление 2: Диагностика и восстановление файла .htaccess

Apache читает файлы .htaccess на каждом уровне каталогов от корня сайта до запрашиваемого ресурса. Одна неверно сформированная директива — или директива, добавленная плагином безопасности — может заблокировать доступ ко всему разделу вашего сайта.

Шаг 1: Определите, является ли .htaccess причиной проблемы

Переименуйте файл, чтобы временно отключить его:

mv /var/www/html/.htaccess /var/www/html/.htaccess.bak

Перезагрузите страницу. Если ошибка 403 исчезла, виновником является файл .htaccess.

Шаг 2: Определите проблемную директиву

Распространённые директивы .htaccess, вызывающие ошибки 403:

# Overly broad IP deny rule
Deny from all

# Missing Allow directive paired with Deny
Order deny,allow
Deny from all
# (Allow from all is absent)

# Incorrect Options directive
Options -Indexes -ExecCGI
# This is fine, but the following blocks everything:
Options None

# Require directive blocking all (Apache 2.4+)
Require all denied

Шаг 3: Создайте чистый .htaccess для WordPress

Перейдите в раздел Настройки > Постоянные ссылки в панели управления WordPress и нажмите Сохранить изменения, ничего не меняя. WordPress заново создаст корректный .htaccess. Стандартный .htaccess WordPress выглядит следующим образом:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Шаг 4: Проверьте AllowOverride в основной конфигурации сервера

Если AllowOverride None задан в httpd.conf или блоке виртуального хоста, Apache полностью игнорирует файлы .htaccess — однако некоторые директивы из основной конфигурации могут по-прежнему применяться и конфликтовать с ожидаемым поведением.

grep -r "AllowOverride" /etc/apache2/

Для работы .htaccess необходимо как минимум:

<Directory /var/www/html>
    AllowOverride All
</Directory>

Исправление 3: Деактивация плагинов и тем WordPress

Плагины безопасности (Wordfence, iThemes Security, Sucuri) часто добавляют правила блокировки по IP, директивы mod_security или пользовательские записи .htaccess, которые вызывают ошибки 403 — иногда блокируя доступ самому владельцу сайта.

Массовая деактивация всех плагинов через FTP или SSH:

mv /var/www/html/wp-content/plugins /var/www/html/wp-content/plugins_disabled

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

Ошибки 403, связанные с темой, встречаются реже, но возникают, когда хук functions.php темы вмешивается в обработку запросов или когда тема устанавливает требования авторизации для определённых страниц. Для проверки переключитесь на стандартную тему WordPress (Twenty Twenty-Four) через phpMyAdmin, если у вас нет доступа к панели управления:

UPDATE wp_options SET option_value = 'twentytwentyfour' WHERE option_name = 'template';
UPDATE wp_options SET option_value = 'twentytwentyfour' WHERE option_name = 'stylesheet';

Браузеры агрессивно кэшируют HTTP-ответы, включая ответы с ошибками. Однажды полученная ошибка 403 может быть закэширована и воспроизводиться даже после устранения первопричины. Это особенно актуально, когда перед вашим сервером стоит CDN или обратный прокси (Cloudflare, Varnish).

Исправление на уровне браузера:

Откройте инструменты разработчика браузера (F12), перейдите на вкладку Сеть, щёлкните правой кнопкой мыши на неудачном запросе и выберите Очистить кэш браузера — или выполните принудительное обновление:

  • Windows/Linux: Ctrl + Shift + R
  • macOS: Cmd + Shift + R

Исправление на уровне CDN/прокси:

Если вы используете Cloudflare, очистите кэш для конкретного URL в панели управления Cloudflare в разделе Кэширование > Очистка кэша > Выборочная очистка.

Важный нюанс: Если ошибка 403 отдаётся самим Cloudflare (вы увидите «Error 1020» или страницу ошибки с брендингом Cloudflare), блокировка применяется на уровне CDN через правило брандмауэра или блокировку по репутации IP — а не вашим исходным сервером. Исправление прав доступа на сервере в этом случае не даст никакого эффекта. Проверьте журнал Безопасность > События в Cloudflare для подтверждения.

Исправление 5: Проверка правил запрета IP и блокировок брандмауэра

Ошибки 403 на основе IP часто возникают, когда плагины безопасности, fail2ban или ручные правила iptables блокируют легитимный IP-адрес — включая ваш собственный.

В cPanel (блокировщик IP):

  1. Войдите в cPanel.
  2. Перейдите в раздел Безопасность > Блокировщик IP.
  3. Просмотрите список заблокированных IP-адресов и удалите все записи, которых там не должно быть.

В .htaccess или httpd.conf Apache:

# Apache 2.2 syntax
Order deny,allow
Deny from 203.0.113.45

# Apache 2.4 syntax
<RequireAll>
    Require all granted
    Require not ip 203.0.113.45
</RequireAll>

Через fail2ban (распространено в средах VPS):

# List all jails
fail2ban-client status

# Check if your IP is banned in the apache-auth jail
fail2ban-client status apache-auth

# Unban an IP address
fail2ban-client set apache-auth unbanip 203.0.113.45

Через iptables:

# List rules with line numbers
iptables -L INPUT -n --line-numbers

# Remove a specific DROP rule (replace 5 with the actual line number)
iptables -D INPUT 5

На выделенном сервере, где вы управляете всем сетевым стеком, всегда проверяйте как правила брандмауэра на уровне приложения, так и на уровне ядра, прежде чем делать вывод о том, что проблема в конфигурации веб-сервера.

Исправление 6: Отключение или перенастройка защиты от хотлинкинга

Защита от хотлинкинга работает путём проверки HTTP-заголовка Referer. Если запрос поступает с Referer, которого нет в списке разрешённых, сервер возвращает ошибку 403. Этот механизм может давать сбои в нескольких сценариях:

  • Прямой доступ по URL — некоторые конфигурации блокируют запросы без заголовка Referer, что характерно для пользователей, вводящих URL напрямую, переходящих по ссылкам из почтовых клиентов или использующих браузеры с защитой конфиденциальности, которые удаляют заголовки реферера.
  • Переходы с HTTPS на HTTP — браузеры не отправляют заголовок Referer при переходе со страницы HTTPS к ресурсу HTTP, что приводит к блокировке запроса защитой от хотлинкинга.
  • Доступ через API или скрипты — программные запросы часто полностью опускают заголовок Referer.

В cPanel (защита от хотлинкинга):

  1. Перейдите в раздел Безопасность > Защита от хотлинкинга.
  2. Убедитесь, что ваш домен (варианты как с http://, так и с https://) присутствует в списке URL-адресов с разрешённым доступом.
  3. При тестировании временно нажмите Отключить и проверьте, исчезнет ли ошибка 403.

Непосредственно в .htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www.)?yourdomain.com/ [NC]
RewriteRule .(jpg|jpeg|png|gif|webp|svg)$ - [F,L]

Чтобы разрешить прямой доступ (пустой Referer), удалите строку RewriteCond %{HTTP_REFERER} !^$.

Исправление 7: Корректировка конфигурации сервера Apache или NGINX

Когда вы управляете сервером — как на VPS с cPanel или на выделенном сервере без предустановленного ПО — неверно настроенные директивы виртуального хоста или серверного блока являются частой причиной ошибок 403.

Конфигурация Apache

Распространённая ошибка конфигурации — отсутствующий Require all granted:

В Apache 2.4 модель авторизации существенно изменилась. Старая директива Allow from all устарела. Без явного оператора Require Apache по умолчанию запрещает доступ.

<VirtualHost *:80>
    ServerName yourdomain.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Проверьте наличие Options -Indexes: Эта директива предотвращает листинг каталогов (возвращая ошибку 403, когда индексный файл отсутствует). Если в каталоге нет файла index.html или index.php, Apache возвращает ошибку 403. Это намеренное поведение в целях безопасности — но если вы ожидаете листинг каталога, добавьте Options +Indexes.

Проверьте конфигурацию и перезапустите:

apachectl configtest
systemctl reload apache2

Конфигурация NGINX

Распространённая ошибка конфигурации — неверный путь root или отсутствующий индекс:

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

Если директива root указывает на несуществующий путь или путь, который пользователь процесса nginx не может прочитать, каждый запрос будет возвращать ошибку 403.

Проверьте журналы ошибок NGINX для выяснения точной причины:

tail -n 50 /var/log/nginx/error.log

Ошибка 403 от NGINX почти всегда порождает запись в журнале вида:

2024/01/15 10:23:45 [error] 1234#0: *1 "/var/www/html/index.html" is forbidden (13: Permission denied)

Код ошибки 13 означает Отказано в доступе на уровне ОС — вернитесь к исправлению 1 и проверьте права доступа к файловой системе и владельца.

Проверьте и перезагрузите NGINX:

nginx -t
systemctl reload nginx

Сравнение устранения ошибок 403 в Apache и NGINX

ФакторApacheNGINX
Файл конфигурации для каталога.htaccess (если AllowOverride All)Не поддерживается; конфигурация только в серверном блоке
Модель доступа по умолчанию (v2.4+)Запрет, если не указан Require all grantedЗапрет, если путь root недоступен для чтения или отсутствует
Листинг каталоговOptions +Indexes для включенияautoindex on; для включения
Синтаксис блокировки IPRequire not ip x.x.x.xdeny x.x.x.x; в location {}
Команда проверки конфигурацииapachectl configtestnginx -t
Команда перезагрузкиsystemctl reload apache2systemctl reload nginx
Расположение журналов/var/log/apache2/error.log/var/log/nginx/error.log
Эквивалент .htaccessВстроенная поддержкаТребует преобразования в директивы nginx.conf

Исправление 8: Проверка SSL-сертификата и конфигурации перенаправления HTTPS

Это исправление отсутствует в большинстве руководств по ошибке 403, однако является реальной и часто упускаемой из виду причиной. Неверно настроенные правила перенаправления SSL могут вызывать ошибки 403 в определённых сценариях.

Сценарий 1: Принудительное перенаправление на HTTPS до того, как сертификат действителен

Если перенаправление .htaccess направляет весь трафик на HTTPS, но SSL-сертификат ещё не выпущен или истёк, некоторые конфигурации сервера возвращают ошибку 403 вместо ошибки сертификата.

# Problematic if SSL is not configured on the server
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Убедитесь, что ваш сертификат активен и правильно установлен, прежде чем применять принудительное перенаправление на HTTPS.

Сценарий 2: Требование клиентского SSL-сертификата mod_ssl

Если ваша конфигурация Apache требует клиентских SSL-сертификатов для аутентификации, а браузер не предоставляет его, Apache возвращает ошибку 403:

<Directory /var/www/secure>
    SSLVerifyClient require
    SSLVerifyDepth 1
</Directory>

Если вы намеренно не реализовывали взаимный TLS (mTLS), удалите эту директиву или установите SSLVerifyClient none.

Сценарий 3: Предзагрузка HSTS с неверной цепочкой перенаправлений

Петля перенаправления, вызванная конфликтующими заголовками HSTS и правилами перенаправления с HTTP на HTTPS, может проявляться как ошибка 403 в определённых комбинациях браузер/прокси. Проверьте полную цепочку перенаправлений с помощью:

curl -I -L --max-redirs 10 http://yourdomain.com

Системная диагностика: чтение журналов ошибок

Каждое из приведённых выше исправлений следует сочетать с мониторингом журналов в реальном времени. Угадывание без чтения журналов — пустая трата времени.

Apache — просмотр журнала ошибок в реальном времени:

tail -f /var/log/apache2/error.log | grep 403

NGINX — просмотр журнала ошибок в реальном времени:

tail -f /var/log/nginx/error.log | grep 403

Среды cPanel — доступ к журналам через:

tail -f /usr/local/apache/logs/error_log

Запись в журнале почти всегда точно укажет, какой файл вызвал ошибку 403 и почему — отказано в доступе, отсутствует индексный файл или явное правило запрета.

Матрица решений: выбор правильного исправления

Используйте эту матрицу для определения наиболее вероятного исправления на основе симптомов:

СимптомНаиболее вероятная причинаОсновное исправление
Ошибка 403 на всех страницах после миграцииВладелец файлов изменился при переносеИсправление 1 — chown и chmod рекурсивно
Ошибка 403 после установки плагина WordPressПлагин добавил правила .htaccessИсправление 2 + Исправление 3
Ошибка 403 только для изображений или медиафайловНеверная настройка защиты от хотлинкингаИсправление 6
Ошибка 403 после смены IP-адресаПравило запрета IP, нацеленное на старый IPИсправление 5
Ошибка 403 на новом VPS без CMSОтсутствует Require all granted в Apache 2.4Исправление 7
Ошибка 403 после включения SSLНеверная настройка перенаправления HTTPS или mod_sslИсправление 8
Ошибка 403 только в одном браузереЗакэшированный ответ с ошибкойИсправление 4
Ошибка 403 со страницей ошибки CloudflareПравило брандмауэра CDN или блокировка по репутации IPИсправление 4 (очистка CDN) + панель управления Cloudflare
Ошибка 403 по URL каталога, но не файловОтсутствует индексный файл + Options -IndexesИсправление 7 — добавьте индексный файл или включите +Indexes

Ключевые технические выводы

  • Всегда читайте журнал ошибок сервера в первую очередь — он за секунды укажет точный файл и причину ошибки 403.
  • В Apache 2.4+ директива Require all granted обязательна в каждом блоке <Directory>. Её отсутствие — наиболее распространённая причина ошибки 403 при новых настройках сервера.
  • Прав доступа к файлам недостаточно — владелец должен соответствовать пользователю процесса веб-сервера (www-data, apache, nginx).
  • Ошибка 403, отдаваемая CDN (Cloudflare, Fastly), полностью отличается от ошибки 403, отдаваемой вашим исходным сервером. Исправление одной не влияет на другую.
  • На сайтах WordPress всегда проверяйте с массово отключёнными плагинами, прежде чем тратить время на диагностику на уровне сервера.
  • Если вы управляете собственной инфраструктурой на VPS или выделенном сервере, держите в поле зрения журналы fail2ban и правила iptables — они работают ниже уровня веб-сервера и невидимы для инструментов отладки на уровне приложения.
  • Правила защиты от хотлинкинга, блокирующие пустые заголовки Referer, будут затрагивать легитимных пользователей браузеров с защитой конфиденциальности и переходящих по ссылкам из электронной почты — всегда добавляйте исключение для пустых реферов.

Часто задаваемые вопросы

В чём разница между ошибкой 403 Forbidden и ошибкой 401 Unauthorized?

Ошибка 401 Unauthorized означает, что сервер требует аутентификации, а клиент не предоставил действительные учётные данные — повторная аутентификация может решить проблему. Ошибка 403 Forbidden означает, что сервер определил, кто вы (или не требует аутентификации), но явно отказывает в доступе в любом случае. Предоставление учётных данных не поможет при ошибке 403.

Может ли ошибка 403 повлиять на позиции моего сайта в поисковых системах?

Да. Если Googlebot получает ошибку 403 при сканировании страницы, он не может её проиндексировать. Постоянные ошибки 403 на важных URL приведут к их исчезновению из результатов поиска. Используйте инструмент проверки URL в Google Search Console, чтобы проверить, может ли Googlebot получить доступ к вашим страницам, и следите за отчётом об охвате на предмет ошибок сканирования, связанных с ошибкой 403.

Почему я получаю ошибку 403 только для определённых типов файлов (изображений, PDF)?

Это почти всегда указывает на защиту от хотлинкинга (исправление 6) или правило для определённого MIME-типа в .htaccess. Проверьте наличие директив FilesMatch или RewriteRule, нацеленных на определённые расширения. Также убедитесь, что каталог, содержащий эти файлы, имеет права доступа 755 и принадлежит правильному пользователю сервера.

Как исправить ошибку 403, если у меня нет доступа по SSH или FTP?

Используйте веб-файловый менеджер вашего хостинг-провайдера (доступный в cPanel, Plesk или DirectAdmin) для проверки и изменения прав доступа к файлам и файлов .htaccess. Для проблем, специфичных для WordPress, инструмент WP-CLI (если доступен через терминал панели управления) или прямой доступ к базе данных через phpMyAdmin могут помочь деактивировать плагины и сменить темы без SSH.

Означает ли ошибка 403, что мой сайт был взломан?

Не обязательно, но это может быть симптомом. Вредоносное ПО иногда внедряет правила запрета в файлы .htaccess или изменяет права доступа к файлам, чтобы заблокировать доступ. Если вы не можете определить причину ошибки 403 на уровне конфигурации, просканируйте файлы на несанкционированные изменения с помощью такого инструмента, как rkhunter, Wordfence (если у вас есть доступ к WordPress) или сканера вредоносного ПО вашего хостинг-провайдера. При наличии резервных копий сравните хэши файлов с заведомо исправными версиями.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать