.htaccess и DNS: что настраивается записями DNS, а что в .htaccess
DNS и .htaccess — два разных уровня, которые часто путают. DNS решает, какой сервер отвечает за домен. .htaccess решает, что Apache делает с запросом, уже пришедшим на этот сервер. Классический источник путаницы: «как сделать www-редирект в DNS» — это невозможно, редирект делает только сервер.
Два разных уровня: DNS и .htaccess
Когда браузер открывает https://example.com/page, происходит два принципиально разных шага:
- DNS-резолюция: браузер спрашивает у DNS-сервера, какой IP-адрес стоит за
example.com. DNS-записи хранятся у регистратора домена или DNS-хостинга (Cloudflare, ns1, 8сек и т.п.). На этом шаге решается: на какой физический сервер идти. - HTTP-запрос на сервер: браузер соединяется с найденным IP и отправляет запрос. Apache на этом сервере читает
.htaccessи решает: перенаправить, отдать файл, проверить авторизацию, подставить заголовки.
.htaccess вообще не участвует в DNS-резолюции — он включается только после того, как запрос уже пришёл на ваш сервер.
Что делается только в DNS
Эти задачи решаются записями DNS у регистратора или в DNS-панели — .htaccess не может их выполнить:
- A / AAAA — указать IP-адрес (v4 / v6) сервера для домена. Если сменили хостинг — меняете A-запись, и трафик идёт на новый сервер.
- CNAME — «псевдоним» домена на другой домен. Используется для поддоменов (
www→ основной домен) и для подключения CDN (example.com→xxx.cdn-provider.net). - MX — почтовый сервер домена. Где принимать email для
@example.com. Никакого отношения к.htaccessне имеет. - TXT — текстовые данные: SPF (разрешённые отправители почты), DKIM (подпись письма), DMARC (политика обработки), верификация домена для Google Search Console, подтверждение для SSL-сертификата.
- CAA — какие центры сертификации могут выдавать SSL для домена.
- ALIAS / ANAME — у некоторых DNS-провайдеров: CNAME-подобная запись для корневого домена (apex). Про IP, не про редиректы.
Что делается только в .htaccess
Эти задачи решаются в .htaccess (или конфиге Apache) — DNS не может их выполнить:
- Редирект http → https: DNS не умеет редиректить. Запись A говорит «вот сервер», а уже Apache на этом сервере отвечает на http-запрос кодом 301 и отправляет браузер на https.
- Склейка www ↔ без-www: CNAME-запись
www → example.comлишь говорит «www тоже идёт на тот же сервер». 301-редирект с www на без-www (или наоборот) — это.htaccess. - Редиректы страниц и путей:
/old-page/→/new-page/— только сервер, никакого DNS. - Авторизация, доступ по IP, пароль: DNS не знает о пользователях и запросах.
- HTTP-заголовки: HSTS, CSP, X-Frame-Options, Cache-Control — только сервер.
- Кэширование статики:
ExpiresByType— только сервер. - Блокировка ботов по User-Agent: DNS не видит заголовки HTTP-запроса.
Миф: www-редирект в DNS
Один из самых популярных запросов — «как настроить www-редирект в DNS». Краткий ответ: нельзя.
DNS не умеет делать HTTP-редиректы. CNAME-запись www → @ (или www → example.com) означает только: «поддомен www смотрит на тот же IP, что и основной домен». Браузер, открыв www.example.com, всё равно придёт на ваш сервер с запросом, где в заголовке Host стоит www.example.com. Apache увидит www в Host и ответит — но без инструкции в .htaccess никакого редиректа не будет.
Правильная www-склейка (без-www как канонический):
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L] RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
При этом CNAME-запись www → example.com в DNS всё равно нужна — иначе www.example.com просто не резолвится и не доходит до вашего сервера. Но 301-редирект делает .htaccess, а не DNS.
Аналогичная ситуация с «голым доменом» (apex): ALIAS/ANAME у некоторых DNS-провайдеров позволяет указать CNAME для корня — это про то, какой IP у домена, а не про редирект.
Поддомен против подкаталога
Частый вопрос: лучше сделать блог на blog.site.ru или site.ru/blog/?
Поддомен blog.site.ru:
- Требует отдельной DNS-записи A или CNAME у регистратора.
- Обычно это отдельный document root (отдельная папка на сервере) или даже отдельный сервер.
- У поддомена свой
.htaccess— он не наследует правила корневого сайта. - С точки зрения SEO — для Google это отдельный сайт (хотя Search Console позволяет добавить как часть домена).
Подкаталог site.ru/blog/:
- Никаких DNS-записей не нужно — это просто папка на том же сервере.
- Правила из корневого
.htaccessдействуют и здесь (если нет.htaccessв самом подкаталоге с противоречащими правилами). - Нельзя
.htaccess-ом «создать поддомен» — это разные уровни.
Переезд на новый домен: DNS + .htaccess вместе
Правильный переезд с old-domain.ru на new-domain.ru требует настройки на обоих уровнях:
- DNS нового домена → направить A-запись на тот же (или новый) сервер, где лежит сайт.
- На СТАРОМ домене в
.htaccessпоставить 301-редирект каждого пути на соответствующий путь нового домена. - Держать старый домен и редирект рабочими минимум год.
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L,QSA] </IfModule>
Нельзя «переехать» только записью DNS: если просто перенаправить A-запись старого домена на новый сервер, браузер придёт на новый сервер с заголовком Host: old-domain.ru. Apache отдаст контент нового сайта под старым URL — это дубли, а не переезд. 301-редирект в .htaccess на старом домене — обязательный шаг.
Парковка домена и CDN
Домен «припаркован» у регистратора — заглушка DNS-провайдера. На таком домене нет вашего Apache, .htaccess не работает вообще. Чтобы .htaccess вступил в силу — сначала направьте DNS-записи на хостинг, где лежит ваш сайт.
Сайт за CDN (Cloudflare и другие):
- DNS-записи домена указывают на CDN (CNAME или специальные NS).
- CDN принимает запросы, кэширует и передаёт вашему серверу (origin). На origin
.htaccessработает, но Apache видит запросы от CDN-узлов, а не от реальных браузеров. - CDN сам может делать правила («Page Rules» в Cloudflare, «Transform Rules» и т.п.) — это аналог некоторых
.htaccess-возможностей. Не дублируйте: если «Always Use HTTPS» включён в Cloudflare, не ставьте ещё и https-редирект в.htaccess— получите лишний хоп. - За CDN
%{HTTPS}вmod_rewriteвсегдаoff(CDN сам терминирует TLS). ИспользуйтеRewriteCond %{HTTP:X-Forwarded-Proto} !httpsдля https-редиректа.
Ссылки
- SEO и редиректы через .htaccess — переезд домена, канонический хост, www/HTTPS.
- «.htaccess на разных хостингах» — где DNS-настройки на cPanel/ISPmanager/Plesk.
- Рецепты .htaccess — готовые блоки: www-редирект, HTTPS, переезд домена.
- .htaccess и nginx — аналогичное сравнение для nginx.
- Бесконечный редирект — петля HTTPS за прокси/CDN.