Redirect 301

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Суть задачи:

есть сайт на OpenCart, точнее даже на ocStore версии 2.1.0.2.1, по сути эти движка одинаковы, отличия могут быть в каких-нибудь плюшках, не суть важно. На сайте настроен SeoPro так что при переходе на ссылку товара, в урле которого нет категории, идет редирект 302 на урл товара с категорией.

Например

при открытии ссылки товара

/apple-ipad-10-2-wi-fi-32gb-silver-mw752

идет редирект 302 на ссылку товара с категорией ipad

/ipad/apple-ipad-10-2-wi-fi-32gb-silver-mw752

Так вот в данном случае нужен редирект 301

Варианты решения проблемы с редиректом

на опенкаре все редиректы в основном используют метод redirect


$this->response->redirect($url);

Метод принадлежит классу Response

путь к файлу: /system/library/response.php

Открываем файл и видим следующую картину репина


. . .

public function redirect($url, $status = 302) {
  header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url), true, $status);
  exit();
}

. . .

Оказывается у метода есть доп параметр, который обычно упускают, это status

Вариант 1

исправляем статус по умолчанию на 301

Вариант 2

исправляем везде где встречается вызов метода redirect и где нам нужен именно 301 редирект

на строчку примерно такого вида


$this->response->redirect($url,301);

конечно вместо $url должна стоять та переменная которая и использовалась.

вообще достаточно только в файле seo_pro.php исправить.

Вариант n

написать модуль для редиректа, заплатить кому-нибудь чтоб сделали тоже самое, купить модуль который по сути будет делать тоже самое, и т.д. и т.п.

То что осталось за кадром

просматривая код seo_pro.php (возможно он был уже кем то модифицирован)

нашел такие строчки


if (rawurldecode($url) != rawurldecode($seo)) {
header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');

$this->response->redirect($seo);
}

то есть, злой гений все-таки хотел сделать редирект 301, и перед вызовом метода $this->response->redirect добавил ответ 301, НО сцуко не учли что метод потом затер тот ответ и поставил свой 302.

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

1 комментарий

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

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