.htaccess: 10 полезных рецептов

Файл .htaccess — мощный инструмент управления сайтом на Apache. Один маленький текстовый файл в корне сайта может настроить редиректы, защиту от хотлинков, кэширование, сжатие, защиту паролем и многое другое. Все рецепты в этой статье — готовые к использованию, проверенные, без лишней теории. Скопируйте нужный блок в свой .htaccess, и функция заработает.

Содержание

  1. Что такое .htaccess
  2. Как создать .htaccess
  3. 1. Принудительное HTTPS
  4. 2. Редирект с www на без www
  5. 3. Кастомная страница 404
  6. 4. Gzip-сжатие
  7. 5. Кэширование статики
  8. 6. Защита от хотлинков
  9. 7. 301 редирект отдельных страниц
  10. 8. Защита папки паролем
  11. 9. Блокировка/разрешение по IP
  12. 10. ЧПУ — убрать .html из URL
  13. Частые ошибки
  14. FAQ

Что такое .htaccess

.htaccess (от «hypertext access») — конфигурационный файл веб-сервера Apache. Точка в начале означает скрытый файл. Размещается в корне сайта или в любой подпапке. Правила применяются для текущей папки и всех вложенных.

Работает только на серверах Apache. Если ваш хостинг на Nginx — настройки делаются через панель управления или конфиги сервера (обычно нет доступа на виртуальном хостинге). 95% российских виртуальных хостингов используют Apache или Nginx + Apache, где .htaccess работает.

Как создать .htaccess

  1. В текстовом редакторе (VS Code, Sublime, Notepad++) создаёте новый файл.
  2. Сохраняете как .htaccess (с точкой в начале, без расширения).
  3. Если редактор не даёт сохранить с точкой — сохраните как htaccess.txt, потом переименуйте.
  4. Загружаете через FTP в корень сайта (рядом с index.html).

На некоторых FTP-клиентах файлы с точкой скрыты. В FileZilla: Сервер → Принудительно показывать скрытые файлы.

1. Принудительное HTTPS

Все запросы по http:// автоматически перенаправляются на https://.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

2. Редирект с www на без www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Наоборот, с без www на www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

3. Кастомная страница 404

ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html

4. Gzip-сжатие

Уменьшает размер передаваемых файлов в 2-5 раз, ускоряет сайт.

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/json
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

5. Кэширование статики

Браузер запоминает картинки, CSS, JS, не запрашивает повторно — мгновенная загрузка при повторных визитах.

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"
  ExpiresByType image/x-icon "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType text/javascript "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType font/woff2 "access plus 1 year"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresDefault "access plus 2 days"
</IfModule>

Запрещает другим сайтам встраивать ваши картинки. Экономит трафик хостинга.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.ru [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F]

7. 301 редирект отдельных страниц

Когда страница переехала или удалена, перенаправьте на новый адрес — сохранится поисковый трафик.

Redirect 301 /old-page.html https://yourdomain.ru/new-page.html
Redirect 301 /old-folder/ https://yourdomain.ru/new-folder/

8. Защита папки паролем

Полезно для админ-разделов или версий в разработке.

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /полный/путь/к/.htpasswd
Require valid-user

Файл .htpasswd содержит логин:зашифрованный_пароль. Генератор паролей — htaccesstools.com/htpasswd-generator/.

9. Блокировка/разрешение по IP

Заблокировать конкретный IP:

Require all granted
Require not ip 192.0.2.10
Require not ip 198.51.100.0/24

Разрешить только определённые IP (для админки):

Require ip 192.0.2.10
Require ip 198.51.100.0/24

10. ЧПУ — убрать .html из URL

Превращает yourdomain.ru/about.html в yourdomain.ru/about.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^.]+)$ $1.html [L]

# И редирект со старых URL с .html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]

Частые ошибки

  1. 500 Internal Server Error. Чаще всего — синтаксическая ошибка в .htaccess. Проверьте последние изменения, временно закомментируйте подозрительные строки через #.
  2. Правила не применяются. Модуль не включён на хостинге (mod_rewrite, mod_expires). Свяжитесь с поддержкой.
  3. Цикличный редирект. Условия конфликтуют, страница перенаправляется в кольце. Проверьте все правила редиректов.
  4. Тяжёлые правила замедляют сайт. Сотни RewriteRule создают нагрузку. Оптимизируйте.
  5. Файл загружен с расширением .txt. Должен называться строго .htaccess без расширения.
  6. Кодировка не UTF-8. Используйте UTF-8 без BOM, иначе возможны проблемы.

FAQ

На каких хостингах работает .htaccess?

На Apache и Apache+Nginx (95% российских виртуальных хостингов). На чистом Nginx — не работает, настройки делаются через панель управления.

Можно ли иметь несколько .htaccess в разных папках?

Да. Каждый файл действует на свою папку и её подпапки. Правила в подпапке могут перекрывать правила в корневой.

Можно ли увидеть, что .htaccess работает?

Косвенно — по эффектам: редиректы работают, страница 404 кастомная, файлы кэшируются. Проверка кэша/сжатия — через DevTools → Network → выбрать файл → Headers.

Что делать, если .htaccess не работает?

1) Проверьте, что AllowOverride включён в конфиге Apache (обычно по умолчанию). 2) Проверьте права файла (644). 3) Проверьте имя файла (точно ли .htaccess). 4) Свяжитесь с техподдержкой хостинга.

Тяжёлый ли .htaccess для сервера?

Сами правила лёгкие. Но Apache читает .htaccess при каждом запросе. Для очень нагруженных сайтов лучше переносить настройки в основной конфиг сервера (требует VPS).

Как протестировать редиректы без поломки сайта?

Сначала используйте R=302 (временный редирект) — поисковики его не запоминают. После проверки замените на R=301 (постоянный).

Заключение

.htaccess — один из самых полезных инструментов для управления статичным сайтом без программирования. 10 рецептов из этой статьи закрывают 90% задач: безопасность, скорость, SEO, удобство. Скопируйте нужное в свой файл — и сайт станет лучше за минуты работы.

Если ваш хостинг не поддерживает .htaccess или работает с ним нестабильно — пора менять. Подборщик хостингов Zettabyte поможет найти провайдера с правильной настройкой Apache. А готовые HTML-шаблоны часто идут с базовым .htaccess в комплекте.