Открыть меню

Как сделать подмену url (внутренний .htaccess редирект) в opencart 2.1.0.2

Для чего это нужно?

Бывает так, что главную страницу магазина на Opencart надо сделать категорией товаров или мало ли чем ещё. Я имею ввиду не 301 редирект на категорию, а чтобы у пользователя показывался url главной страницы, но контент был от другой страницы, этакая внутренняя подмена url.

Конкретно в моём случае, это делалось по причинам seo ( в топе  яндекса в основном главные страницы с товарами, то бишь категории). Осуществить задуманное можно разными способами: копировать код контроллера категории в контроллер главной страницы и подправить на выбранную категорию, либо сделать подмену страницы при помощи файла .htacess, либо другим способом.

Но поскольку сроки были сжаты (а бывает ли по-другому?), я выбрал самый быстрый (как я думал) способ — .htaccess и …я ошибся) Делать подмену оказалось интереснее, чем задумывалось, поэтому и пишу этот пост.

Проблема

Если мы, например, на рабочем магазине Opencart 2.1.0.2 просто впишем в файл .htaccess что-такое:

то с удивлением обнаружим, что правило не работает! А сервер отдает код ответа 301 вместо «внутреннего» редиректа с кодом 200! Однако, на одном из моих проектов на стареньком opencart 1.5.X.X это правило прекрасно себе работает. Я сделал следующие предположения:

  1. Проблема в окружении — версия/конфигурация apache
  2. Какой-то внутренний скрипт берёт на себя функцию редиректа, хотя я такого не писал.

После проверки окружения начал искать редирект в коде и конечно же наткнулся на всеми горячо любимый модуль SeoPro.

Решение проблемы

В версии 2.1.0.2 поведение SeoPro изменено (возможно ещё с более ранних версий) — именно этот модуль делает 301 редирект при несовпадении запрашиваемого клиентом ($_SERVER[‘REQUEST_URI’]) и опреденного модулем url-а, что и затирает функционал htaccess. Файл \catalog\controller\common\seo_pro.php, метод validate().

Всё что остается — добавить массив исключений — url-ов, для которых не надо применять 301 редирект (которые мы описали в htaccess) и добавить условие, что проверяемый url не входит в этот массив:

Решение не самое элегантное, но быстрое.

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

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

© 2017 Продвижение сайтов в Санкт-Петербурге · Копирование материалов сайта без разрешения запрещено