Генератор .htaccess — рабочий файл без ошибки 500
Соберите файл .htaccess без ручного кода: закройте служебные файлы, поставьте пароль на раздел или доступ по IP, включите сжатие и кеширование, назначьте страницы ошибок и режим обслуживания. Директивы, которым нужен модуль сервера, обёрнуты в <IfModule> — если модуля на хостинге нет, блок просто не сработает, а не уронит сайт.
Домен сайта
Нужен для склейки www/https и защиты от хотлинкинга — для остальных блоков не обязателен.
www и HTTPS склейка зеркал
Та же функция уже есть в Генераторе 301-редиректов. Если вы уже сгенерировали склейку www/https там — не добавляйте её здесь повторно: при склеивании двух файлов в один получится задвоенный RewriteEngine On и повторяющиеся правила. Используйте склейку в одном месте — либо здесь, либо там.
Включайте только если на сайте уже установлен и работает SSL-сертификат. Без сертификата редирект на HTTPS сделает сайт полностью недоступным.
Безопасность
Заголовки безопасности
SAMEORIGIN оставляет встраивание на своём домене, DENY запрещает везде.
Браузер запомнит требование HTTPS на выбранный срок вперёд — если сертификат вдруг станет недействителен, сайт будет недоступен у уже заходивших посетителей всё это время. Включайте только при стабильно работающем HTTPS.
Производительность
Страницы ошибок
Путь должен вести на реально существующий локальный файл — иначе при ошибке браузер может провалиться в ещё одну ошибку.
Канонизация URL
Режим обслуживания
Ответ автоматически отдаётся с кодом 503, а не обычным 200 — так поисковики понимают, что это временно, и не воспринимают страницу «мы скоро вернёмся» как настоящий контент вместо ваших реальных страниц.
Ограничение доступа IP и пароль
Правила действуют на ту папку, где лежит файл, и на все вложенные. Чтобы закрыть только раздел — положите отдельный .htaccess внутрь него, а не в корень сайта.
192.168.1.0/24 и адреса IPv6. Свой текущий IP смотрите в любом сервисе «мой IP».
.htpasswd с логинами и паролями создаётся отдельно — в панели хостинга или командой htpasswd -c. Пароли мы не генерируем: хранить их можно только на вашей стороне.
Готовый код
Вставьте в файл .htaccess в корне сайта. Обновляется автоматически. При скачивании файл сохраняется как htaccess.txt — браузеры не отдают файлы с точкой в начале имени, поэтому на сервере его нужно переименовать в .htaccess.
Чек-лист перед публикацией
- Сделайте резервную копию текущего
.htaccessперед заменой - Проверьте, что файлы страниц ошибок (404, 403, 500) реально существуют по указанным путям
- После публикации откройте сайт в браузере — если появилась ошибка 500, верните резервную копию и уберите директивы по одной
- Проверьте работу сайта и с www, и без — на случай опечатки в домене
Код формируется локально в браузере — ничего не отправляется на сервер Neorank.
Важно: сначала сделайте резервную копию текущего .htaccess: ошибка в файле может отключить сайт. Проверьте правила на тестовом адресе.
Как не превратить .htaccess в причину падения сайта
.htaccess — единственный файл конфигурации, ошибка в котором мгновенно останавливает весь сайт. Разбираем, почему так происходит и как это предотвратить.
Зачем нужен <IfModule>
Каждая директива в .htaccess принадлежит конкретному модулю Apache — сжатие настраивает mod_deflate, заголовки безопасности — mod_headers, редиректы — mod_rewrite. Если модуль не загружен на хостинге, а директива стоит без обёртки — Apache не может её распознать и останавливает обработку всего сайта ошибкой 500.
-
<IfModule mod_headers.c>...</IfModule>— если модуля нет, блок просто пропускается - Сайт продолжает работать без этой конкретной функции, а не падает целиком
- Каждая директива этого конструктора обёрнута именно так — без исключений
Почему здесь нет php_value
На хостингах с PHP как модулем Apache (mod_php) директивы php_value/php_flag работают. Но большинство современных хостингов используют PHP-FPM — отдельный процесс, который вообще не читает .htaccess. Без правильной обёртки такая директива останавливает сайт ошибкой 500.
- Определить заранее, что именно установлено на конкретном хостинге, не может ни один генератор
- Поэтому здесь эта категория директив сознательно не предлагается
- Настройки PHP надёжнее менять через панель хостинга или файл
php.ini, если доступ есть
Почему важно закрывать служебные файлы
Файлы вроде .env, .git/config или бэкапов базы данных .sql часто просто лежат в публичной папке сайта — если не запретить к ним прямой доступ, любой человек может открыть их по прямой ссылке и увидеть пароли от базы данных, ключи API или структуру репозитория.
Это не теоретический риск: автоматические сканеры постоянно проверяют сайты именно на наличие таких файлов по стандартным путям — закрыть доступ стоит буквально пары строк в .htaccess.
Сжатие и кеширование — не только про скорость
Gzip-сжатие уменьшает объём передаваемых HTML/CSS/JS в разы — это быстрее для посетителя и меньше нагрузки на сервер. Кеширование в браузере идёт ещё дальше: при повторном визите картинки и стили вообще не запрашиваются заново, а берутся из локального кеша браузера.
Скорость загрузки — прямой фактор ранжирования в Google и Яндексе, а для мобильного трафика (где канал часто медленнее) эффект ощущается сильнее всего.
Режим обслуживания и код 503
Частая ошибка при временном закрытии сайта — показать страницу «сайт на обслуживании», но с кодом ответа 200 (как у обычной страницы). Поисковик воспринимает это как «на этом адресе теперь другой контент» и может начать вытеснять из индекса настоящие страницы сайта заглушкой.
Код 503 явно сообщает: «сервис временно недоступен, загляните позже» — поисковик не трогает уже проиндексированные страницы и просто повторяет попытку позже.
Зачем канонизировать URL
Если сайт одновременно открывается и по /page, и по /page/, и по /page/index.html — для поисковика это три разных адреса с одинаковым содержимым. Дубли размывают ранжирование между версиями вместо того, чтобы весь вес доставался одной канонической странице.
Правила канонизации в этом блоке приводят все варианты к единому виду через постоянный редирект, а не просто прячут разницу визуально.
Что такое .htaccess, где он лежит и как работает
Файл настроек Apache, который меняет поведение сервера без доступа к его основному конфигу.
.htaccess — текстовый файл с директивами веб-сервера Apache. Он позволяет менять поведение сервера в отдельной папке, когда прав на основной конфиг нет, — именно поэтому файл стал стандартом на виртуальном хостинге. Имя начинается с точки: в Unix-системах это признак скрытого файла, поэтому в файловом менеджере хостинга его часто не видно, пока не включить показ скрытых файлов.
Правила действуют на папку, где лежит файл, и на все вложенные. Файл в корне сайта управляет всем сайтом; файл внутри /admin/ — только этим разделом. Вложенные файлы переопределяют правила родительских, поэтому неожиданное поведение часто объясняется забытым .htaccess уровнем ниже.
| Директива | Нужен модуль | Что делает |
|---|---|---|
RewriteRule, RewriteCond |
mod_rewrite | Переписывание и переадресация адресов: склейка зеркал, канонизация, режим обслуживания, защита от хотлинкинга. |
Header set |
mod_headers | Добавление HTTP-заголовков: политики безопасности, HSTS, Retry-After при обслуживании. |
AddOutputFilterByType |
mod_deflate | Сжатие текстовых ответов перед отправкой браузеру — HTML, CSS, JS, JSON, SVG. |
ExpiresByType |
mod_expires | Сроки хранения файлов в кеше браузера: картинки на месяц, стили и скрипты на неделю, HTML — без кеширования. |
Require, <RequireAll> |
Встроен в ядро | Управление доступом в Apache 2.4: запрет по IP, режим «только свои адреса», проверка авторизации. |
AuthType, AuthUserFile |
mod_auth_basic | Запрос логина и пароля при входе в раздел. Сами логины хранятся в отдельном файле .htpasswd. |
ErrorDocument, Options |
Встроены в ядро | Свои страницы ошибок и запрет листинга каталогов. Модуль не нужен, но Options требует, чтобы хостинг разрешал его переопределять. |
На Nginx файл .htaccess не работает. Это механизм Apache, и никаких аналогов «положить файл в папку» у Nginx нет: его правила задаются в конфигурации виртуального хоста и требуют перезагрузки сервера. Если хостинг работает на связке Nginx + Apache, файл обычно читается — но только той частью, которая обрабатывает динамику. Проверить, что именно у вас, можно у поддержки хостинга.
Запрет доступа, пароль на раздел и редиректы
Три самые частые причины, по которым к файлу вообще обращаются.
Запретить доступ по IP
В Apache 2.4 доступом управляет директива Require. Чтобы закрыть сайт для конкретных адресов, их перечисляют внутри блока <RequireAll> после разрешения для всех остальных — конструктор собирает это автоматически. Обратный сценарий — пустить только свои адреса — делается блоком <RequireAny>: удобно для админки или стенда, но закрывает раздел и для поисковых роботов.
Старый синтаксис Order deny,allow и Deny from остался от Apache 2.2. На современных серверах он работает только при включённом модуле совместимости, а без него даёт ошибку 500 — поэтому в готовый код мы его не добавляем. Если вам достался чужой файл с такими строками, их стоит переписать на Require.
Поставить пароль на папку
Базовая HTTP-авторизация состоит из двух частей. В .htaccess указывают тип авторизации, название окна входа и полный путь на сервере к файлу с паролями — не адрес в браузере, а путь вида /home/user/.htpasswd. Сам файл .htpasswd создаётся отдельно: в панели хостинга или командой htpasswd -c. Пароли в нём хранятся в виде хеша, а не открытым текстом.
Файл с паролями лучше держать вне папки сайта, чтобы он не открывался по прямой ссылке. Если такой возможности нет, оставьте включённой блокировку служебных файлов — она закрывает .htpasswd от чтения снаружи.
Редиректы и склейка зеркал
Постоянные переадресации тоже настраиваются здесь, но правил обычно много и они индивидуальны: со старых адресов на новые, с одного домена на другой, отдельные страницы после переезда. Для этого у нас есть генератор 301-редиректов — он собирает правила списком и умеет выгружать их сразу в формате .htaccess.
Склейка www и HTTPS есть в обоих инструментах, и это единственное пересечение. Настраивайте её в одном месте: если вставить оба файла подряд, получится задвоенный RewriteEngine On и два конкурирующих правила на один адрес.
Порядок правил в файле важен: Apache читает их сверху вниз, и первое сработавшее правило с флагом [L] останавливает обработку. Поэтому конструктор всегда ставит режим обслуживания первым, затем блокировки, затем склейку зеркал и только потом канонизацию адресов — при другом порядке закрытый на обслуживание сайт успел бы сначала отправить посетителя в редирект.
Файл не работает или сайт отдаёт ошибку 500
Что проверять по порядку, когда после правки .htaccess что-то пошло не так.
Верните резервную копию
Первым делом восстановите работу сайта, а разбираться будете потом. Если копии нет — переименуйте файл в htaccess.bak: сервер перестанет его читать, и сайт откроется.
Добавляйте директивы по одной
Возвращайте блоки по частям, проверяя сайт после каждого. Так виновная строка находится за несколько минут — гораздо быстрее, чем вычитыванием всего файла глазами.
Загляните в лог ошибок
В панели хостинга есть журнал ошибок Apache. Он называет и файл, и номер строки: например Invalid command 'ExpiresActive' означает, что модуль mod_expires на сервере не подключён.
Проверьте, читается ли файл вообще
Впишите первой строкой заведомо неверную директиву. Если сайт отдал 500 — файл читается, и дело в правилах. Если ничего не изменилось — сервер его игнорирует, и причину нужно искать у хостинга.
Частые причины, по которым файл не срабатывает
Файл назван неправильно
Имя должно быть ровно .htaccess — с точкой в начале и без расширения. Windows и часть файловых менеджеров сохраняют его как htaccess.txt или .htaccess.txt, и сервер такой файл просто не видит.
По той же причине кнопка скачивания на этой странице отдаёт htaccess.txt: браузеры не сохраняют файлы с точкой в начале имени, переименовать нужно уже на сервере.
Хостинг запрещает переопределение
Директива AllowOverride в конфиге сервера решает, какие группы директив разрешено менять из .htaccess. Если она выставлена в None, файл читается, но игнорируется целиком.
Чаще всего так закрывают Options — тогда строка Options -Indexes даёт ошибку 500 при полном порядке в синтаксисе. Уточните у поддержки хостинга, что разрешено.
Директивы PHP дают ошибку 500
Строки php_value и php_flag работают только когда PHP подключён как модуль Apache. На PHP-FPM, который сегодня стоит почти везде, они приводят к ошибке 500.
Настройки PHP на таком хостинге задаются файлом .user.ini или в панели управления. Поэтому в этот конструктор PHP-директивы не включены — слишком высок шанс положить сайт.
Браузер помнит старый редирект
Код 301 — постоянный, и браузер кеширует его надолго. После правки правил может казаться, что ничего не изменилось, хотя на сервере уже всё верно.
Проверяйте в режиме инкогнито или очистите кеш. По этой же причине новые правила переадресации сначала лучше отдавать с кодом 302 и переключать на 301, когда убедились, что всё работает.
Синтаксис директив приведён по документации Apache HTTP Server 2.4: управление доступом через Require (модуль mod_authz_core), базовая авторизация (mod_auth_basic), <IfModule> как условный блок проверки модуля. Устаревшие директивы Order, Allow from и Deny from относятся к Apache 2.2 и на 2.4 требуют модуля совместимости mod_access_compat, поэтому в готовый код не добавляются. Ветка Apache 2.2 официальной поддержки не имеет.
Частые вопросы о файле .htaccess
Где найти файл, как закрыть доступ, почему возникает ошибка 500 и что делать на Nginx.
Обычно в корне сайта — рядом с index.php или index.html. Имя начинается с точки, а в Unix-системах это признак скрытого файла: в файловом менеджере хостинга и в FTP-клиенте его не видно, пока не включить показ скрытых файлов.
Файл может лежать и во вложенных папках — тогда его правила действуют только на них и переопределяют родительские. Если поведение сайта не совпадает с корневым файлом, проверьте, нет ли .htaccess уровнем ниже.
Чаще всего — директива требует модуль Apache, которого на хостинге нет. Не понимая команду, сервер останавливает обработку и отдаёт 500 на весь сайт. Именно поэтому такие директивы оборачивают в <IfModule>: при отсутствии модуля блок просто пропускается.
Вторая по частоте причина — php_value и php_flag на хостинге с PHP-FPM. Третья — запрет переопределения: если AllowOverride не разрешает группу директив, даже синтаксически верная строка даст ошибку.
Порядок действий простой: вернуть резервную копию, затем добавлять блоки по одному и смотреть журнал ошибок в панели хостинга — он называет и файл, и номер строки.
Условный блок, который проверяет, загружен ли нужный модуль Apache, прежде чем применять директивы внутри. Если модуля нет — блок тихо пропускается вместо ошибки 500 на весь сайт.
Оборачивать имеет смысл именно модульные директивы: RewriteRule, Header, AddOutputFilterByType, ExpiresByType. Встроенные в ядро — ErrorDocument, Require, Options — в обёртке не нуждаются, и конструктор их не заворачивает.
В блоке «Ограничение доступа» выберите режим и перечислите адреса по одному в строке. Можно указать одиночный адрес, подсеть в формате 192.168.1.0/24 или адрес IPv6. Конструктор соберёт правило на синтаксисе Apache 2.4 с директивой Require.
Есть и обратный режим — пустить только перечисленные адреса. Он удобен для админки и тестовых стендов, но закрывает раздел для всех остальных, включая поисковых роботов. Обязательно добавьте в список свой адрес: иначе доступ к сайту придётся возвращать через файловый менеджер хостинга.
Старые конструкции Order deny,allow и Deny from all — синтаксис Apache 2.2. На современных серверах они работают только с модулем совместимости, поэтому мы их не генерируем.
Включите «Запрашивать логин и пароль» и укажите полный путь на сервере к файлу .htpasswd — не адрес в браузере, а путь вида /home/user/.htpasswd. Сам файл с логинами создаётся отдельно: в панели хостинга или командой htpasswd -c, пароли хранятся в нём в виде хеша.
Пароли мы намеренно не генерируем: их место — только на вашей стороне. Файл .htpasswd лучше держать вне папки сайта, а если это невозможно — оставьте включённой блокировку служебных файлов, она закроет его от чтения снаружи.
Чтобы защита действовала только на раздел, положите отдельный .htaccess внутрь этой папки, а не в корень сайта.
Опция «Закрыть доступ к чувствительным файлам» закрывает типовой набор: .env, .htpasswd, composer.json, дампы баз, логи и резервные копии. Работает через <FilesMatch> с директивой Require all denied.
Отдельно закрываются служебные каталоги — .git, .svn и подобные. Это важное различие: <FilesMatch> сопоставляется только с именем файла, поэтому запись вида .git не защищает /.git/config — а именно через него утекают исходники. Для каталогов нужно правило по пути, и конструктор добавляет его отдельной строкой.
Исключение сделано для .well-known: через этот каталог проходит подтверждение домена при выпуске SSL-сертификата, и закрывать его нельзя.
Только если PHP подключён как модуль Apache. Директивы php_value и php_flag обрабатывает именно он, а на PHP-FPM — а это сегодня почти все хостинги — они вызывают ошибку 500.
На таких серверах настройки PHP задаются файлом .user.ini в корне сайта или через панель управления хостингом. Поэтому в конструкторе PHP-директив нет: слишком велика вероятность положить сайт ради настройки, которую всё равно нужно делать в другом месте.
Нет. Это механизм Apache, и прямого аналога у Nginx нет: его правила описываются в конфигурации виртуального хоста и применяются только после перезагрузки сервера. Положить файл в папку и получить эффект не выйдет.
На многих хостингах работает связка, где Nginx отдаёт статику, а динамику передаёт Apache — тогда файл читается, но только для той части запросов, которая доходит до Apache. Если правила срабатывают выборочно, скорее всего дело именно в этом: уточните схему у поддержки хостинга.
Склейка зеркал — www и HTTPS — есть прямо здесь, в блоке «www и HTTPS». Для остальных переадресаций (со старых адресов на новые, с одного домена на другой, отдельных страниц после переезда) удобнее генератор 301-редиректов: он собирает правила списком и выгружает их в формате .htaccess.
Важно не настроить склейку зеркал дважды. Если вставить код обоих инструментов подряд, получится задвоенный RewriteEngine On и два конкурирующих правила на один адрес — выберите одно место.
Если страница «мы скоро вернёмся» отдаётся с обычным кодом 200, поисковая система считает её нормальным содержимым страницы и может заменить им ваш реальный текст в индексе. Код 503 означает «сервис временно недоступен» — робот вернётся позже и ничего не переиндексирует.
Вместе с 503 конструктор добавляет заголовок Retry-After: он подсказывает роботу, через сколько имеет смысл зайти снова. Ещё одна деталь — из-под режима обслуживания выведены стили и картинки, иначе страница-заглушка показалась бы без оформления.
Универсального файла не существует, и это не отговорка: у CMS есть свой служебный блок, который движок записывает сам и может перезаписать при обновлении. У WordPress он отмечен комментариями # BEGIN WordPress и # END WordPress, у Битрикса — своими правилами для ЧПУ.
Правило простое: свои директивы добавляйте выше или ниже служебного блока, но никогда не внутрь него. Код из этого конструктора самодостаточен и с блоком CMS не конфликтует — за одним исключением: если движок уже настраивает склейку www и HTTPS, не включайте её здесь повторно.
Нет. Файл собирается локально в браузере на JavaScript: домен, IP-адреса и пути никуда не передаются и нигде не сохраняются.
Скачанный файл сохраняется как htaccess.txt — браузеры не отдают файлы с точкой в начале имени. Переименуйте его в .htaccess уже на сервере.