htaccess Error: как найти проблему и исправить ошибку .htaccess

htaccess Error означает, что файл .htaccess содержит неправильные правила или конфликтующие директивы. Из-за этого сайт может показывать 500 Internal Server Error, 403 Forbidden, Too Many Redirects, белый экран WordPress или вообще не открываться.

Чаще всего проблема появляется после установки плагина, настройки редиректов, SSL, кэша, защиты сайта или переноса WordPress на другой хостинг.

Quick Fix

  • Подключитесь к сайту через файловый менеджер хостинга или FTP.
  • Найдите файл .htaccess в корневой папке сайта.
  • Переименуйте его в .htaccess_old.
  • Проверьте, заработал ли сайт.
  • Если сайт заработал, проблема точно была в .htaccess.
  • Для WordPress зайдите в Настройки → Постоянные ссылки и нажмите Сохранить изменения.
  • WordPress создаст новый чистый .htaccess.
  • Потом возвращайте старые правила по одному и проверяйте сайт после каждого изменения.

Что такое .htaccess

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

На WordPress файл .htaccess обычно находится в корневой папке сайта, рядом с папками:

  • wp-admin
  • wp-content
  • wp-includes
  • wp-config.php

Важно: файл начинается с точки. Поэтому в некоторых файловых менеджерах он может быть скрыт. Нужно включить показ скрытых файлов.

Как понять, что проблема именно в .htaccess

Ошибка в .htaccess часто проявляется сразу после изменения настроек сайта. Например, вы поставили SSL-плагин, включили редирект на HTTPS, изменили постоянные ссылки или добавили правила кэша — и сайт перестал работать.

Типичные признаки:

  • появилась ошибка 500 Internal Server Error;
  • сайт показывает 403 Forbidden;
  • страницы WordPress дают 404, хотя записи существуют;
  • начался бесконечный редирект;
  • браузер пишет Too Many Redirects;
  • админка WordPress не открывается;
  • главная страница работает, а внутренние страницы нет;
  • после установки плагина сайт сломался;
  • после переноса на другой хостинг сайт не открывается.

Основные причины htaccess Error

1. Неправильный синтаксис

Одна ошибка в строке может сломать весь сайт. Например, неправильная директива, лишний символ, неверная кавычка или правило, которое Apache не понимает.

Пример проблемной строки:

RewriteRule ^old-page$ /new-page [R=301,L

Здесь не закрыта квадратная скобка. Правильно:

RewriteRule ^old-page$ /new-page [R=301,L]

2. Модуль mod_rewrite отключён

Для правил WordPress и редиректов нужен модуль Apache mod_rewrite. Если он отключён, правила RewriteEngine, RewriteCond и RewriteRule могут вызвать ошибку.

На VPS можно включить модуль командой:

sudo a2enmod rewrite
sudo systemctl restart apache2

3. Директива запрещена настройками хостинга

Не все директивы разрешены в .htaccess. На shared-хостинге некоторые команды могут быть запрещены.

Например, проблема может быть с такими директивами:

  • Options
  • php_value
  • php_flag
  • SetHandler
  • Header
  • Require

Если хостинг не разрешает такую директиву, сайт может показать 500 Internal Server Error.

4. Конфликт редиректов

Очень частая причина — конфликт между несколькими редиректами. Например, один блок перенаправляет HTTP на HTTPS, другой — HTTPS обратно на HTTP, третий добавляет www, а четвёртый убирает www.

В результате браузер показывает:

  • ERR_TOO_MANY_REDIRECTS
  • Too Many Redirects
  • The page isn’t redirecting properly

5. Конфликт с WordPress-плагином

Плагины кэша, безопасности, SSL и редиректов часто добавляют свои правила в .htaccess. Если два плагина добавляют похожие правила, сайт может сломаться.

Чаще всего виноваты:

  • SSL-плагины;
  • плагины редиректов;
  • плагины безопасности;
  • плагины кэша;
  • плагины оптимизации скорости;
  • плагины защиты wp-admin.

6. Неправильные правила после миграции сайта

После переноса сайта на другой домен, сервер или папку старый .htaccess может содержать неправильные пути и редиректы.

Например:

  • старый домен в редиректе;
  • неправильная папка сайта;
  • старые правила HTTPS;
  • правила, подходящие только для старого хостинга;
  • директивы, которые новый хостинг не поддерживает.

7. Неправильные права на файл

Если права на .htaccess слишком строгие или слишком открытые, сервер может не прочитать файл или хостинг может заблокировать его.

Обычно для .htaccess подходят права:

644

Для папок обычно:

755

Как найти проблему в .htaccess

1. Сделайте резервную копию

Перед любыми изменениями скачайте файл .htaccess на компьютер или создайте копию в файловом менеджере.

Например:

.htaccess_backup

Так вы сможете быстро вернуть старую версию, если что-то пойдёт не так.

2. Переименуйте .htaccess

Самый быстрый тест — временно отключить файл.

Переименуйте:

.htaccess

в:

.htaccess_old

После этого откройте сайт в браузере.

Если сайт заработал, значит проблема была в .htaccess. Если сайт не заработал, причина может быть в PHP, плагине, теме, базе данных, Apache, Nginx, SSL или хостинге.

3. Создайте чистый .htaccess для 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

Сохраните файл как .htaccess в корневой папке сайта.

После этого зайдите в WordPress:

Настройки → Постоянные ссылки → Сохранить изменения

Это обновит правила ЧПУ.

4. Добавляйте старые правила по одному

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

Возвращайте старые правила по одному:

  • сначала WordPress-блок;
  • потом HTTPS-редирект;
  • потом www/non-www редирект;
  • потом кэш;
  • потом security-правила;
  • потом дополнительные 301-редиректы.

После каждого блока обновляйте сайт. Так вы быстро найдёте правило, которое ломает сайт.

5. Проверьте логи ошибок Apache

Если у вас VPS, подключитесь по SSH и посмотрите лог:

sudo tail -n 100 /var/log/apache2/error.log

На CentOS, AlmaLinux или Rocky Linux:

sudo tail -n 100 /var/log/httpd/error_log

В логах часто видно точную причину:

  • Invalid command
  • RewriteRule: bad flag delimiters
  • Options FollowSymLinks not allowed here
  • Request exceeded the limit of 10 internal redirects
  • File does not exist

6. Проверьте, включён ли AllowOverride

На VPS Apache может игнорировать .htaccess, если в конфигурации отключён AllowOverride.

В VirtualHost или конфигурации сайта должно быть:

<Directory /var/www/example.com>
    AllowOverride All
    Require all granted
</Directory>

Если стоит:

AllowOverride None

то .htaccess не будет работать.

После изменения конфигурации проверьте Apache:

sudo apachectl configtest
sudo systemctl reload apache2

7. Проверьте редиректы

Если проблема в бесконечном редиректе, проверьте, не дублируются ли правила.

Например, редирект на HTTPS может быть сразу в нескольких местах:

  • в .htaccess;
  • в WordPress-плагине;
  • в настройках хостинга;
  • в Cloudflare;
  • в конфигурации Apache или Nginx.

Оставьте редирект только в одном месте.

Готовый правильный .htaccess для 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

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

Пример редиректа HTTP на HTTPS

Если SSL уже установлен и сайт корректно открывается по HTTPS, можно использовать такой редирект:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Не добавляйте этот код, если HTTPS ещё не настроен. Иначе сайт может уйти в ошибку или бесконечный редирект.

Пример редиректа с www на non-www

Если основной адрес сайта без www, можно использовать:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>

Замените example.com на свой домен.

Пример редиректа с non-www на www

Если основной адрес сайта с www, используйте:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
</IfModule>

Важно: используйте только один вариант — либо www, либо non-www. Не ставьте оба правила одновременно.

Частые ошибки в .htaccess

500 Internal Server Error

Самый частый симптом ошибки в .htaccess. Причина может быть в неправильной директиве, отключённом модуле, запрещённом правиле или ошибке синтаксиса.

Быстрый тест: переименуйте .htaccess в .htaccess_old. Если сайт заработал, проблема найдена.

Too Many Redirects

Означает, что сайт попал в цикл редиректов. Например, одно правило отправляет на HTTPS, а другое возвращает обратно на HTTP.

Проверьте редиректы в:

  • .htaccess;
  • WordPress;
  • Cloudflare;
  • панели хостинга;
  • SSL-плагинах;
  • плагинах редиректов.

403 Forbidden

Может быть вызвано правилами запрета доступа. Например:

Deny from all

или неправильным блоком:

Require all denied

Также проверьте права на папки и файлы.

404 на всех внутренних страницах WordPress

Если главная страница работает, а записи и страницы показывают 404, скорее всего сломаны правила постоянных ссылок.

Решение:

WordPress → Настройки → Постоянные ссылки → Сохранить изменения

Если не помогло, проверьте, включён ли mod_rewrite и разрешён ли AllowOverride All.

Ошибка после установки SSL

Проверьте, нет ли одновременно нескольких HTTPS-редиректов. Особенно если вы используете Cloudflare или SSL-плагин.

Правило простое: редирект на HTTPS должен быть только в одном месте.

Advanced Troubleshooting

Проверьте .htaccess на лишние блоки от плагинов

Многие плагины добавляют блоки между комментариями:

# BEGIN Plugin Name
...
# END Plugin Name

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

Проверьте php_value и php_flag

На многих современных хостингах директивы php_value и php_flag запрещены, особенно если PHP работает через PHP-FPM.

Пример проблемного кода:

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_flag display_errors Off

Если после добавления таких строк появляется 500 ошибка, удалите их и настройте PHP-параметры через панель хостинга, .user.ini или php.ini.

Проверьте директиву Options

Некоторые хостинги запрещают отдельные параметры Options. Например:

Options FollowSymLinks

Может вызвать ошибку, если сервер не разрешает эту директиву в .htaccess.

Иногда помогает заменить на:

Options +FollowSymLinks

Но лучше уточнить правила у хостинга.

Проверьте лимит внутренних редиректов

Если в логах есть:

Request exceeded the limit of 10 internal redirects

значит правила зациклились. Временно отключите кастомные RewriteRule и оставьте только стандартный блок WordPress.

Проверьте сайт за Cloudflare

Если сайт работает через Cloudflare, не дублируйте редиректы везде сразу.

Опасная схема:

  • Cloudflare делает Always Use HTTPS;
  • WordPress-плагин делает HTTPS-редирект;
  • .htaccess делает HTTPS-редирект;
  • хостинг делает ещё один редирект.

Лучше оставить один стабильный редирект: на сервере или в Cloudflare, но не в четырёх местах одновременно.

Как безопасно редактировать .htaccess

  • Всегда делайте копию файла перед изменениями.
  • Не вставляйте сразу большой кусок кода.
  • Добавляйте правила по одному.
  • После каждого изменения проверяйте сайт.
  • Не используйте два противоположных редиректа одновременно.
  • Не копируйте правила с чужого сайта без понимания.
  • Не редактируйте # BEGIN WordPress блок вручную без необходимости.
  • Если сайт сломался, сразу переименуйте файл в .htaccess_old.

Когда обращаться в поддержку хостинга

Обратитесь в поддержку, если:

  • вы не видите файл .htaccess в файловом менеджере;
  • после переименования .htaccess сайт всё равно не работает;
  • хостинг блокирует нужные директивы;
  • вы не знаете, включён ли mod_rewrite;
  • внутренние страницы WordPress продолжают показывать 404;
  • после установки SSL начался редирект-луп;
  • ошибка появилась после миграции сайта.

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

FAQ

Как понять, что ошибка в .htaccess?

Переименуйте файл .htaccess в .htaccess_old и откройте сайт. Если сайт заработал, проблема была в этом файле.

Где находится .htaccess в WordPress?

Обычно он находится в корневой папке сайта, рядом с wp-config.php и папками wp-admin, wp-content, wp-includes.

Почему после изменения .htaccess появилась 500 ошибка?

Скорее всего, в файле есть неправильная директива, ошибка синтаксиса, отключённый модуль Apache или правило, которое запрещено на вашем хостинге.

Как восстановить стандартный .htaccess WordPress?

Удалите или переименуйте старый файл. Затем зайдите в WordPress: Настройки → Постоянные ссылки и нажмите Сохранить изменения. WordPress создаст новый файл.

Можно ли удалить .htaccess?

Можно временно переименовать или удалить файл для проверки. Но для WordPress он нужен для красивых ссылок и правильной работы внутренних страниц. Лучше создать новый чистый файл, а не оставлять сайт без него.

Вывод

htaccess Error чаще всего вызывает 500 ошибку, редирект-луп, 403 Forbidden или 404 на внутренних страницах WordPress. Самый быстрый способ найти проблему — переименовать .htaccess, проверить сайт и затем создать чистый файл.

Не возвращайте все старые правила сразу. Добавляйте их по одному и проверяйте сайт после каждого изменения. Так вы точно найдёте строку, которая ломает сайт.