Перевод магазина OsCommerce на HTTPS

В рамках услуги по грамотному переводу сайтов с HTTP на HTTPS ко мне обратились с запросом переезда магазина на OsCommerce. В принципе, мне нет особой разницы, с каким конкретно движком работать, особенно если он написан на php — в коде я разбираюсь хорошо, поэтому могу подготовить любой сайт. Однако каждый движок имеет свои нюансы: всегда можно сделать «в лоб», чтобы работало, но можно чуть заморочиться и сделать «как правильно» — с учётом особенностей движка (под этим я понимаю различные константы в коде, специальные функции, code style и так далее.)

Как же правильно настроить безопасное соединение на Os Commerce?

Начал я с изучения конфига. Он находится по адресу includes/configure.php. Вот строчки, которые нам нужны:

define('HTTP_SERVER', 'http://fladex.ru'); // eg, http://localhost - should not be empty for productive servers
define('HTTPS_SERVER', 'https://fladex.ru'); // eg, https://localhost - should not be empty for productive servers
define('ENABLE_SSL', false); // secure webserver for checkout procedure?

По названию переменных можно сразу понять, что к чему. Указываем адрес сайта сначала с http-протоколом, потом с https (если у вас только http, то везде указываем именно его). Далее, переключение ENABLE_SSL в true приведёт к редиректу с http на https, поэтому его включаем только в самом конце, когда всё остальное будет готово и протестировано.

Однако при таком подходе я столкнулся с проблемой. Часть ссылок действительно стала использовать безопасный протокол, но при этом остались ссылки, которые даже с https-версии вели на http-страницы. Я стал искать причину в коде, локализуя места, где генерируются подобные ссылки. Поиск привёл меня к специальной функции.

Функция tep_href_link()

Эта функция используется для формирования внутренних ссылок в OsCommerce. Она принимает несколько параметров, но в контексте темы текущей статьи нас интересует только один — он идёт третьим по порядку и принимает строковое значение: ‘SSL’ или ‘NOSSL’. Соответственно, если значение NOSSL, то генерироваться ссылка будет с протоколом HTTP. И с HTTPS для SSL.

Поэтому я нашёл вхождения подобных функций в коде и заменил их с ‘NOSSL’ на ‘SSL’.

Корректный вариант

Чуть позже я опытным путём пришёл к выводу, что это неправильный формат переезда. Вот как обстоит дело на самом деле: движок OsCommerce разделяет все внутренние ссылки на «важные» и «неважные» с точки зрения безопасности передаваемых данных. Поэтому ссылки на корзину, на форму регистрации будут важными для него, а на листинг товаров — нет.

Этим же объясняется тот третий параметр в функции tep_href_link(). Для ссылок на важные страницы он содержит значение ‘SSL’, для остальных — ‘NOSSL’. И редактировать это значение будет неэффективно.

Правильный подход заключается в использовании тех самых переменных из конфига. Это не совсем очевидно, но в обе из них (HTTP_SERVER и HTTPS_SERVER) можно прописать адрес сайта с https-протоколом. Тогда защищённый протокол будет использоваться для всех внутренних ссылок. Но при этом разработчики с помощью подобного разделения дали нам возможность переводить на https только часть страниц, наиболее важных для сохранности передаваемых данных. Остальные же страницы при этом можно оставлять на HTTP, на случай, если вы беспокоитесь за их индексирование и ранжирование в поисковиках.

Перевод админки

Походим образом делаются правки для администраторского раздела магазина. Нужно будет открыть файл includes/configure.php, но уже в папке с админкой. Находим там строки:

define('HTTP_CATALOG_SERVER', 'http://fladex.ru');
define('HTTPS_CATALOG_SERVER', 'https://fladex.ru');
define('ENABLE_SSL_CATALOG', 'false'); // secure webserver for catalog module

и указываем везде адрес сайта с https-протоколом, а для ENABLE_SSL_CATALOG выставляем true.

База данных

Основная часть контента хранится в базе данных, поэтому важно не забыть пройтись по всем таблицам и найти там внутренние ссылки с небезопасным протоколом. Заменяем их на относительные ссылки — по типу //fladex.ru — и сайт готов к получению зелёного значка в адресных строках браузеров.

P.S. Напоминаю, что если планируете переехать на HTTPS, но самим ковыряться в коде не хочется, а также если вы переживаете за падение трафика из-за неправильного переезда, то можете заказать у меня эту услугу под ключ — перевод сайта на HTTPS.

Перевод магазина OsCommerce на HTTPS: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.