.htaccess на разных хостингах и панелях

Работает ли .htaccess на вашем хостинге — зависит не от вас, а от сервера: Apache или нет, и как настроена директива AllowOverride в конфиге. Здесь — обзор популярных хостингов и панелей управления: cPanel, ISPmanager, Plesk, Beget, Timeweb, Reg.ru, LiteSpeed, OpenLiteSpeed, чистый nginx. Для каждого — читается ли .htaccess, типичный AllowOverride, где error.log, известные особенности. Если .htaccess не работает — гид «Почему .htaccess не работает»; проверить синтаксис — линтер; перевести правила в nginx — конвертер.

Точные детали зависят от конфигурации конкретного провайдера и могут меняться — уточняйте в поддержке конкретного хостинга.

1. AllowOverride: что это и кто его задаёт

Директива AllowOverride в конфиге Apache (в блоке <Directory> или vhost) определяет, какие классы директив разрешено использовать в .htaccess. Её задаёт хостинг — вы её не контролируете (на shared) или настраиваете сами (на VPS).

  • AllowOverride All — разрешены все директивы, .htaccess работает полностью. Типично для shared-хостингов.
  • AllowOverride FileInfo Options AuthConfig Limit Indexes — разрешены перечисленные классы. Большинство задач выполнимо.
  • AllowOverride None.htaccess полностью игнорируется Apache. Частый дефолт на VPS (Debian/Ubuntu/CentOS с пакетным Apache) без панели управления.

Если AllowOverride не включает Options, директива Options … в .htaccess даёт 500 Internal Server Error с сообщением Options not allowed here. Если не включает FileInfo — не работают Header, RewriteEngine, AddType.

Как проверить, читается ли .htaccess: добавьте первой строкой заведомо неверную команду — должна появиться 500 Internal Server Error (подробнее — /errors/#ignored):

.htaccessкопировать
ESJDKLKJ

Если 500 появляется — .htaccess читается (Apache его применяет). Если нет — AllowOverride None или сервер вообще не Apache. Уточните в поддержке хостинга.

Директива <Directory> задаётся только в конфиге сервера или vhost — не в .htaccess. На VPS вы можете добавить её в vhost-конфиг сайта (это конфиг сервера, не .htaccess):

.htaccessкопировать
<Directory /var/www/example.com/public_html>
    AllowOverride All
    Require all granted
</Directory>

После изменения vhost-конфига — перезапустите Apache: apachectl restart (или systemctl restart apache2 / httpd). Подробнее про группы AllowOverride и перенос правил в конфиг — статья «AllowOverride и .htaccess vs httpd.conf». Узнать, какой AllowOverride нужен именно вашему .htaccessпроверка совместимости.

2. Shared-хостинг vs VPS/выделенный

Тип сервера сильно влияет на то, как работает .htaccess:

  • Shared-хостинг (один сервер, много аккаунтов) — как правило, AllowOverride All или близко к нему. .htaccess работает «из коробки». Ограничение: не весь модуль, не все директивы могут быть доступны (например, php_value/php_flag не работают на PHP-FPM — используйте .user.ini).
  • VPS / выделенный сервер без панели — Apache из пакетного менеджера (apt/yum) часто имеет дефолт AllowOverride None. Нужно вручную добавить AllowOverride All в vhost и перезапустить Apache.
  • VPS с панелью управления (ISPmanager, cPanel, Plesk) — панель, как правило, сама выставляет AllowOverride All для добавленных сайтов. .htaccess работает.

Если у вас VPS и вы только что установили Apache из пакета — первым делом проверьте AllowOverride в конфиге (обычно /etc/apache2/sites-available/ или /etc/httpd/conf.d/) и при необходимости поставьте AllowOverride All.

3. cPanel (Bluehost, HostGator, SiteGround, Reg.ru и другие)

cPanel — одна из самых распространённых панелей управления хостингом. Хостинги на базе cPanel (многие зарубежные, а также Reg.ru, SprintHost и другие российские провайдеры) используют Apache (часто с nginx-фронтом для статики).

  • .htaccess читается: да, AllowOverride All — стандарт для cPanel.
  • error.log: cPanel → «Metrics → Errors» или файл ~/logs/error_log.
  • nginx-фронт: многие хостинги на cPanel ставят nginx перед Apache. Статика (CSS, JS, картинки) отдаётся nginx и может кэшироваться. Если вы меняете заголовки через .htaccess для статических файлов — изменения могут «не видеться» сразу. Сбросьте кэш nginx в панели (обычно «nginx → Очистить кэш»).
  • EasyApache 4: cPanel использует EasyApache 4 для управления модулями Apache. Если модуль не установлен (mod_headers, mod_expires) — оберните директивы в <IfModule>, чтобы не получать 500:
.htaccessкопировать
<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
    Header set X-Frame-Options "SAMEORIGIN"
</IfModule>
  • MultiPHP (PHP-FPM): cPanel поддерживает несколько версий PHP через MultiPHP. Если PHP работает через FPM (не mod_php), директивы php_value и php_flag в .htaccess НЕ работают — дают 500 Internal Server Error. Используйте .user.ini в корне сайта или MultiPHP INI Editor в панели.
.htaccessкопировать
display_errors = Off
upload_max_filesize = 16M
post_max_size = 20M
max_execution_time = 60

Уточните в поддержке конкретного хостинга — точные детали зависят от конфигурации провайдера.

4. ISPmanager / Plesk

ISPmanager (BITrix ISP) и Plesk — популярные панели управления в России и СНГ, используются как на shared, так и на VPS.

  • .htaccess читается: да, при стандартной настройке «Apache + nginx». Панель выставляет AllowOverride All для сайтов.
  • Архитектура: nginx-фронт + Apache-бэк. .htaccess обрабатывается Apache-бэком. Статика отдаётся nginx и может кэшироваться.
  • error.log: в ISPmanager — раздел «Журналы»; в Plesk — «Logs» сайта (в разделе управления доменом).
  • Plesk — «Proxy mode» (только nginx): если в настройках домена в Plesk включён режим «Proxy mode» без Apache-бэка — .htaccess НЕ работает. Проверьте настройку «Apache & nginx settings» для домена.
  • ISPmanager — режим «только nginx»: аналогично: если сайт настроен в режиме «только nginx» — .htaccess игнорируется. Нужен режим «nginx + Apache».
  • Plesk — директивы напрямую в vhost: в Plesk можно добавить директивы Apache напрямую в vhost («Apache & nginx settings → Additional directives for Apache»). Это альтернатива .htaccess — иногда удобнее.

Уточните в поддержке конкретного хостинга — точные детали зависят от конфигурации провайдера.

5. Российские shared-хостинги (Beget, Timeweb, Reg.ru, Sprinthost, Hostland, Джино, Masterhost)

Большинство российских shared-хостингов используют Apache (часто с nginx-фронтом) и имеют AllowOverride All. .htaccess работает.

  • .htaccess читается: да (Apache с AllowOverride All).
  • error.log: обычно в панели управления — раздел «Логи» / «Журналы» или ~/logs/. Точный путь уточняйте в документации хостинга.
  • CMS-автоустановщики: при установке CMS (WordPress, Joomla и др.) через автоустановщик хостинг может создать свой дефолтный .htaccess. Проверьте наличие файла перед созданием своего.
  • php_value / php_flag: зависит от того, как подключён PHP. На mod_php — работают. На PHP-FPM (FreeBSD/LiteSpeed-стек) — не работают, используйте .user.ini. У некоторых хостингов (например, Beget) есть отдельная панель настроек PHP — там удобнее.
  • Beget: собственная система управления PHP-версиями и настройками; .htaccess работает; есть nginx-фронт.
  • Timeweb: .htaccess работает; есть nginx-фронт; error.log в панели «Логи».

Уточните в поддержке конкретного хостинга — точные детали меняются.

6. LiteSpeed Enterprise / OpenLiteSpeed

LiteSpeed — семейство высокопроизводительных веб-серверов. Важно различать две ветки:

  • LiteSpeed Enterprise — коммерческая, drop-in замена Apache. Читает .htaccess с высокой совместимостью: mod_rewrite, mod_headers, mod_expires, mod_auth и т.д. Дополнительно поддерживает LSCache (мощный серверный кэш).
  • OpenLiteSpeed (бесплатная) — по умолчанию на shared-хостинге .htaccess может не читаться. В adminпанели можно включить: Virtual Host → Rewrite → «Auto Load from .htaccess» = Yes. На хостингах, использующих OpenLiteSpeed (Hostinger и другие), обычно эта опция включена.

LSCache-директивы в .htaccess специфичны для LiteSpeed — на Apache они безопасно игнорируются, если обёрнуты в <IfModule LiteSpeed>:

.htaccessкопировать
<IfModule LiteSpeed>
    CacheLookup on
    RewriteEngine On
    RewriteRule .* - [E=Cache-Control:no-cache]
</IfModule>
  • error.log на LiteSpeed: /usr/local/lsws/logs/error.log или в панели управления OpenLiteSpeed WebAdmin.
  • Хостинги на LiteSpeed (Hostinger, NameHero, многие другие) — обычно .htaccess работает «из коробки».

Уточните в поддержке конкретного хостинга — точные детали зависят от конфигурации провайдера.

7. Чистый nginx (без Apache)

На чистом nginx файл .htaccess не работает вообще — nginx его не читает. Все правила (редиректы, переписывание URL, заголовки, контроль доступа) нужно переносить в конфиг nginx (server { … }).

Перевести правила .htaccess в nginx-конфиг поможет конвертер .htaccess → nginx (примерный перевод — проверяйте вручную).

  • Платформы и хостинги на чистом nginx: Vercel, Netlify (там свои форматы — _redirects, vercel.json), некоторые VPS-стеки, Docker-образы с nginx без Apache.
  • Как определить: проверьте заголовок Server: в ответе сервера:
.htaccessкопировать
curl -I https://example.com

Если в ответе Server: nginx — это чистый nginx или nginx-фронт. Если Server: Apache или Server: LiteSpeed.htaccess читается (при условии правильного AllowOverride).

  • Nginx + Apache-бэк (ISPmanager, Plesk, cPanel с nginx) — .htaccess обрабатывается Apache-бэком, несмотря на то что nginx-фронт отдаёт Server: nginx. В этом случае .htaccess работает для динамических запросов (PHP), но не обязательно для статики.
  • Если сервер — чистый nginx, а у вас есть правила из .htaccess — используйте конвертер.

8. Где искать error.log по хостингам

При любой ошибке .htaccess — первым делом смотрите error.log: там точная строка файла и причина (ссылка /errors/#diagnostics).

  • cPanel — «Metrics → Errors» в панели, или файл ~/logs/error_log (иногда ~/logs/yourdomain.com-error_log).
  • ISPmanager — раздел «Журналы» в панели управления.
  • Plesk — «Logs» / «Журналы» в разделе управления сайтом.
  • Beget — панель «Статистика» → «Логи», или ~/logs/.
  • Timeweb — раздел «Логи» в панели управления.
  • Reg.ru — раздел «Журналы» / «Логи» в панели.
  • VPS Debian / Ubuntu (без панели)/var/log/apache2/error.log (общий), или путь из директивы ErrorLog в vhost-конфиге сайта.
  • VPS CentOS / RHEL (без панели)/var/log/httpd/error_log.
  • LiteSpeed / OpenLiteSpeed/usr/local/lsws/logs/error.log или в WebAdmin-панели OpenLiteSpeed.

Если не можете найти error.log — обратитесь в поддержку хостинга или ищите в документации провайдера.

9. Что делать, если .htaccess не работает на вашем хостинге

Пошаговый алгоритм:

  1. Убедитесь, что сервер — Apache или LiteSpeed (не чистый nginx). Выполните curl -I https://ваш-сайт.ru и проверьте заголовок Server:. На чистом nginx .htaccess не работает — см. раздел 7. Проверить ваш сайт онлайн (тип сервера, HTTPS, заголовки) — чекер сервера.
  2. Убедитесь, что файл называется именно .htaccess (с точкой в начале) и лежит в корне нужного каталога (обычно public_html, www или htdocs). На Windows файл легко сохраняется как .htaccess.txt — включите показ расширений в Проводнике.
  3. Проверьте, читается ли .htaccess — добавьте ESJDKLKJ первой строкой и обновите страницу. Должна появиться 500 Internal Server Error. Если нет — файл не читается: вероятно, AllowOverride None. Обратитесь в поддержку хостинга (на shared) или поправьте vhost (на VPS).
  4. Если появилась 500 — смотрите error.log (см. раздел 8). Там точная причина. Оберните проблемную директиву в <IfModule>, уберите php_value/php_flag (используйте .user.ini).
  5. Если сервер nginx — переносите правила в nginx-конфиг с помощью конвертера.
  6. Если за nginx-фронтом и не видно изменений заголовков/кэша — сбросьте кэш nginx в панели управления.

Полный гид по симптомам («500», «403», «404», «не действует») — «Почему .htaccess не работает». Проверить синтаксис — линтер.

10. Чеклист: совместимость .htaccess с хостингом за 5 минут

  1. Сервер — Apache или LiteSpeed (не чистый nginx)? Проверьте: curl -I https://ваш-сайт.ru → смотрите Server:. — раздел 7
  2. .htaccess читается? Добавьте ESJDKLKJ первой строкой → должна появиться 500. Если нет — AllowOverride None, нужно исправить. — раздел 1
  3. AllowOverride достаточно широкий? Попробуйте Options +Indexes в .htaccess: если 500 с «not allowed here» — нужен более широкий AllowOverride. — раздел 1
  4. Нужные модули включены (mod_rewrite, mod_headers, mod_expires)? Оберните директивы в <IfModule> — безопасно. — раздел 3
  5. php_value/php_flag работают (mod_php) или нужен .user.ini (PHP-FPM)? — раздел 3
  6. Где error.log на вашем хостинге? — раздел 8
  7. Есть ли nginx-фронт с кэшем? Изменения видны не сразу — нужно сбросить кэш в панели. — раздел 3, раздел 4