Переадресация с www на адрес без www в .htaccess
Выберите главный адрес сайта — с www или без — и добавьте в .htaccess правило, которое переводит второй адрес на главный кодом 301. Чтобы переадресация сработала, имя с www должно быть в DNS и в сертификате.
Содержание 10
Что сделать прямо сейчас
- Решите, какой адрес главный — с www или без. Подходят оба; главное — выбрать один и ставить ссылки на него.
- Проверьте, что имя с www есть в DNS и в сертификате — зачем это нужно.
- Сохраните копию .htaccess и добавьте правило в начало файла — с www на адрес без www или наоборот.
- Проверьте переадресацию — как проверить.
Перед настройкой
Переадресация срабатывает, только когда запрос уже дошёл до сервера. Поэтому:
- Имя www.example.com должно быть в DNS — запись A или CNAME. Без неё браузер не найдёт сервер, и до правила дело не дойдёт. Какие записи бывают, как проверить запись.
- Сертификат должен быть выпущен и на example.com, и на www.example.com. Браузер проверяет сертификат до того, как получит ответ с переадресацией: без имени www в сертификате тот, кто откроет https://www.example.com, увидит предупреждение. Бесплатный SSL-сертификат.
С www на адрес без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]Замените example.com на свой домен в обеих строках. Обратная косая черта перед точкой в условии нужна: без неё точка значит «любой символ». Флаг [NC] — без учёта регистра: правило сработает и для WWW.Example.com.
Вариант без имени домена — подходит, если на одной папке работают несколько доменов:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]%1 — то, что попало в скобки условия, то есть имя без www.
С адреса без www на www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]Строка RewriteEngine On нужна в файле один раз: если она уже есть выше, повторять её не нужно.
Вместе с переадресацией на HTTPS
Если в файле есть и правило HTTPS, и правило www, адрес http://www.example.com/ пройдёт две переадресации подряд. Их можно объединить в одну — это правило ставят в начало файла вместо обоих:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301][OR] значит «или»: переадресация сработает, если запрос пришёл не по HTTPS или в имени есть www. Условие %{HTTPS} !=on — для своего VPS. На хостинге замените его условием своего хостинга из статьи про HTTPS и допишите в конце [OR]. Если условие хостинга занимает две строки, оставьте два отдельных правила: сначала HTTPS, потом www.
Если главный адрес — с www, замените вторую строку условием RewriteCond %{HTTP_HOST} ^example\.com$ [NC], а в последней строке поставьте адрес https://www.example.com%{REQUEST_URI}.
Кириллический домен
Домены на кириллице в .htaccess пишут в punycode — латиницей, в том виде, в каком их передаёт браузер. Так советует Timeweb. Например, пример.рф в punycode — xn--e1afmkfd.xn--p1ai. Перевести своё имя можно командой на сервере, подключившись к нему по SSH:
python3 -c "print('пример.рф'.encode('idna').decode())"Подставьте ответ в условие, экранируя точки:
RewriteCond %{HTTP_HOST} ^www\.xn--e1afmkfd\.xn--p1ai$ [NC]Как проверить
В терминале компьютера (как открыть терминал) введите:
curl -I http://www.example.com/В первой строке ответа должно стоять число 301, в строке Location — главный адрес, например https://example.com/. Затем проверьте главный адрес: curl -I https://example.com/ — в первой строке должно быть 200, а строки Location не должно быть.
Браузер запоминает ответ 301, поэтому после исправления правила проверяйте через curl или в окне инкогнито.
Ошибки и как их исправить
| Что видите | Что делать |
|---|---|
| ERR_TOO_MANY_REDIRECTS | правила ведут на разные адреса, например CMS — на адрес с www, а .htaccess — без www; адрес в настройках CMS и правило должны совпадать — разбор |
| адрес с www не открывается совсем | нет записи в DNS — как проверить |
| на www браузер предупреждает о сертификате | имени www нет в сертификате — выпустите сертификат на оба имени |
| ошибка 500 | на VPS не включён mod_rewrite — как включить; другие причины — разбор |
| правило не срабатывает | проверьте домен в условии; кириллический домен — в punycode |
Источники
- Документация Apache: единое имя сайта — переадресация всех имён сайта на одно главное правилом RewriteCond и RewriteRule.
- Документация Apache: RewriteCond — переменные HTTPS (on или off), HTTP_HOST и REQUEST_URI, заголовки запроса через %{HTTP:имя}, флаги NC и OR, ссылки %1 на скобки условия.
- Timeweb: типовые перенаправления — кириллические домены в директивах — в punycode; переадресация на адрес с www и без.
- Спринтхост: файл .htaccess — правило для адреса с www.
Сверено 14 октября 2026 года.
Что почитать дальше
- Файл .htaccessчто это, как создать и не сломать сайт.
- Переадресация на HTTPS через .htaccessусловие для своего хостинга.
- Переадресация 301 в .htaccessстарые страницы и переезд на новый домен.
- DNS-записикакие записи нужны для www.
- ERR_TOO_MANY_REDIRECTSпереадресация по кругу.