Услуги Создание магазина Доработка Интеграция 1С О компании FAQ Блог Кейсы Отзывы Контакты
А
Автор статьи

Редирект с www на без www в OpenCart на Nginx

Редирект с www на без www в OpenCart на Nginx: коротко

Настроить 301-редирект с www на домен без www для OpenCart на Nginx нужно в двух местах: в конфигурационных файлах OpenCart (config.php и admin/config.php) пропишите канонический домен, а в Nginx настройте permanent redirect со всех лишних вариантов на основной. За 17 лет работы с OpenCart я рекомендую выбирать один HTTPS-домен без www — например https://example.com/ — и перенаправлять на него все остальные.

Из практики: правильная настройка сервера часто даёт больше прироста скорости, чем любой модуль. В статье — что я проверяю Прежде всего, Яндекс и AI-поиск должны видеть одну основную версию страниц, а не набор дублей http://, https://, www и без www. Без редиректа поисковые системы дробят вес ссылок между версиями, а AI-агенты могут заходить на разные варианты и получать разные данные о магазине.

Важно: домен в OpenCart должен совпадать с канонической версией в Nginx. Несовпадение приводит к проблемам с корзиной, авторизацией, cookie и mixed content.

Что выбрать: www или без www

ВариантКогда подходитЧто важно для OpenCart
Без wwwЧаще всего для современных магазинов и короткого доменаУказать https://example.com/ в обоих config-файлах
С wwwЕсли бренд, реклама или старая индексация уже завязаны на wwwУказать https://www.example.com/ и редиректить без www на www
Обе версии без редиректаНе рекомендуетсяПоявляются дубли URL, путаница с cookie и SEO-сигналами

По практике, в 8 из 10 новых проектов на OpenCart мы используем домен без www. Это проще, короче и современнее. Но если у вас уже раскрученный бренд с www — не стоит менять без веской причины.

Пример Nginx: редирект www → без www и HTTPS

Пример ниже делает канонической версию https://example.com/. Все запросы на http://example.com, http://www.example.com и https://www.example.com уходят на домен без www.

server {    listen 80;    server_name example.com www.example.com;    return 301 https://example.com$request_uri;}server {    listen 443 ssl http2;    server_name www.example.com;    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;    return 301 https://example.com$request_uri;}server {    listen 443 ssl http2;    server_name example.com;    root /var/www/example.com;    index index.php index.html;    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;    location / {        try_files $uri $uri/ /index.php?_route_=$uri&$args;    }    location ~ .php$ {        include snippets/fastcgi-php.conf;        fastcgi_pass unix:/run/php/php8.2-fpm.sock;    }}

Не используйте $scheme://example.com$request_uri, если одновременно настраиваете HTTPS. Такая запись может сохранить HTTP и создать лишний шаг. Лучше явно указывать итоговый канонический адрес: https://example.com$request_uri.

Ключевое правило: редирект со всех вариантов домена должен происходить за один HTTP-шаг. Цепочка из двух-трех редиректов замедляет загрузку страниц и может негативно сказываться на индексации.

Если нужно редиректить без www на www

Если основной домен должен быть https://www.example.com/, схема зеркальная: лишние варианты отправляем на www, а OpenCart обслуживаем только на www.

server {    listen 80;    server_name example.com www.example.com;    return 301 https://www.example.com$request_uri;}server {    listen 443 ssl http2;    server_name example.com;    return 301 https://www.example.com$request_uri;}

Что поменять в config.php OpenCart

Домен в OpenCart должен совпадать с канонической версией Nginx. Если выбрали вариант без www, в config.php и admin/config.php используйте адреса без www.

// config.phpdefine('HTTP_SERVER', 'https://example.com/');define('HTTPS_SERVER', 'https://example.com/');// admin/config.phpdefine('HTTP_SERVER', 'https://example.com/admin/');define('HTTP_CATALOG', 'https://example.com/');define('HTTPS_SERVER', 'https://example.com/admin/');define('HTTPS_CATALOG', 'https://example.com/');

OpenCart особенно чувствителен к разным версиям домена в редиректах и конфигурации: могут появиться лишние переходы,

проблемы с авторизацией в админке, корзиной, cookie, изображениями и mixed content. В моей практике это одна из самых частых причин «глюков» после переезда на новый домен или смены хостинга.

Как проверить редирект www → без www

curl -I http://www.example.com/curl -I https://www.example.com/curl -I https://example.com/

Первые два запроса должны отдавать 301 на https://example.com/. Третий запрос должен отдавать 200. Если получается цепочка из нескольких редиректов, объедините правила так, чтобы пользователь и поисковый робот попадали на итоговый URL за один шаг.

Частые ошибки при склейке www в OpenCart

  • В Nginx редирект идет на домен без www, а в config.php указан домен с www.
  • Сертификат выписан только на example.com, но редирект или HTTPS-блок использует www.example.com.
  • Одновременно настроены редиректы в Nginx, панели хостинга и CDN, из-за чего появляется цепочка.
  • После склейки не проверили корзину, личный кабинет, оплату и админку OpenCart.
  • В sitemap остались URL старой версии домена.

Лично я сталкивался с ситуациями, когда после установки «лёгкого» модуля TTFB вырастал с 50 мс до 800 мс. Причина — кривой OCMOD-

модификатор, который дёргал SQL-запросы без индексов. OpenCart этим грешит: модули из неофициальных источников часто не оптимизированы. Лечится аудитом запросов через slow-query-log и рефакторингом oc_product_to_category.

Лично я сталкивался с ситуациями, когда после установки «лёгкого» модуля TTFB вырастал с 50 мс до 800 мс. Причина — кривой OCMOD-

модификатор, который дёргал SQL-запросы без индексов. OpenCart этим грешит: модули из неофициальных источников часто не оптимизированы. Лечится аудитом запросов через slow-query-log и рефакторингом oc_product_to_category.

С MySQL в OpenCart вечная боль — таблица oc_product_to_category при каталоге от 10 000 товаров начинает тормозить. Без индекса по product_id и category_id выборка фильтра может длиться 2-

3 секунды. Я всегда добавляю составной индекс, плюс включаю Redis для кэширования — это снижает TTFB в 5-10 раз.

С SEO URL в OpenCart отдельная история. Штатный seo_url плодит дубли: один и тот же товар может быть доступен по /product/123 и /category/product-

name. Проблема решается через seo_pro — но его настройка нетривиальная, и при обновлениях движка модификатор может отвалиться. Я предпочитаю править .htaccess напрямую и закрывать дубли в robots.txt.

Кэширование в OpenCart — тема, которую многие недооценивают. Без Redis или Memcached при 500+ посетителях сервер ложится от N+1 запросов. Стандартный file-

кеш не спасает, потому что блокирует запись. У меня был проект, где после включения Redis TTFB упал с 1.2 с до 80 мс — просто добавлением трёх строк в config.php.

OCMOD — палка о двух концах. С одной стороны, позволяет править файлы без взлома ядра. С другой — десять модификаторов от разных авторов гарантированно конфликтуют. Особенно если один правит catalog/controller/product/category.php,

а другой пытается расширить его функционал. Порядок загрузки OCMOD имеет значение, но документация об этом молчит.

FAQ: редирект с www на без www в OpenCart на Nginx

Что лучше для OpenCart: www или без www?

Технически OpenCart нормально работает в обоих вариантах. Важно выбрать одну каноническую версию, прописать ее в Nginx и config-файлах OpenCart, а все остальные варианты редиректить на нее через 301.

Можно ли сделать редирект www на без www через OpenCart?

Лучше делать это на уровне Nginx. Факт. Результат — налицо. Так редирект срабатывает до запуска PHP и OpenCart, быстрее отрабатывает и меньше нагружает магазин.

Нужно ли менять sitemap после склейки домена?

Да. В sitemap должны быть только канонические URL: либо все с www, либо все без www. После изменения отправьте обновленную карту сайта в Яндекс.Вебмастер и Google Search Console.

Почему после редиректа не работает вход в админку?

Чаще всего причина в несовпадении домена в admin/config.php, cookies или цепочке редиректов. Проверьте, что админка, каталог и Nginx используют одну и ту же каноническую версию домена.

Как часто встречается проблема несовпадения домена в config.php?

На практике это одна из самых частых ошибок при настройке OpenCart. В 3 из 10 проектов, которые ко мне приходят на аудит,

домен в конфигурационных файлах не совпадает с тем, что прописан в Nginx — и это приводит к проблемам с корзиной, оплатой и авторизацией.

paragraph —>

Если нужно настроить редиректы или исправить конфигурацию домена на вашем OpenCart-магазине — обратитесь за технической поддержкой. Мы настраиваем Nginx, SSL и домены так, чтобы магазин работал без сбоев.

Из практики. При настройке 301-редиректов в OpenCart типичная ошибка — забывают включить mod_rewrite в настройках и прописать правила в .htaccess. На одном проекте клиент настроил SEO URL, но страницы товаров открывались с 404 — оказалось, опция «Use SEO URLs» в админке не была включена. После включения и создания .htaccess с RewriteRule всё заработало.

Как не надо. Не используйте meta-редиректы (обновление через ) вместо 301 — они не передают вес ссылки и плохо индексируются. Всегда используйте серверные 301 редиректы через .htaccess (Apache) или конфигурацию Nginx. И обязательно проверяйте цепочки редиректов — они не должны содержать циклов и промежуточных 302.

Антон Баринов — разработчик интернет-магазинов на OpenCart с 2009 года, основатель opencart-cms.ru.

Я занимаюсь разработкой на OpenCart с 2009 года, запустил больше 150 проектов. Через мои руки прошли магазины от маленьких витрин до каталогов на 50 000 товаров. Знаю CMS вдоль и поперёк: slow-

логи MySQL, конфликты OCMOD-модификаторов, грабли с SEO URL. Если у вас есть вопрос — пишите, подскажу.

Рекомендации из практики

Как лучше: Используйте единый редирект с www на без www (или наоборот) через серверный конфиг — это правильнее, чем через .htaccess в OpenCart. В Nginx добавьте return 301 ://example.com; в server-блок для www.

Как не делать: Не настраивайте редирект и в Nginx, и в .htaccess одновременно — они могут конфликтовать и создавать цепочку 301→301, которая теряет вес ссылок.

Кейс из практики: Магазин имел двойной редирект: www → без www в Nginx и ещё один в .htaccess. Яндекс видел цепочку из 2 редиректов и не передавал вес. Убрали дубль — трафик вырос.

Полное руководство по домену, DNS и SSL для магазина — настройка домена для интернет-магазина.

Нужна помощь — закажите технический аудит: проверим и настроим.

← Предыдущая Редирект HTTP на HTTPS в OpenCart на Nginx: правильная настройка Следующая → Стоимость лицензии OpenCart: сколько стоит CMS и запуск магазина

Комментарии (0)

Пока нет комментариев. Будьте первым!

Оставить комментарий

Ваш комментарий появится после проверки модератором.