Przekierowania w prestashop a wyłączone lub usunięte produkty
Mam pytanie o wtyczkę Prestashop Seo Redirects 301, 302, 303. Czy ona idealnie nadała by się robienia przekierowań jeśli produkt jest już nie aktywny lub usunięty? Oraz mam pytanie czy to jest natywny mechanizm w silniku presty ze po podaniu samego id w url przekierwouje na produkt z danym id ale juz z pełnym url?
Dzień dobry,
Czy ona idealnie nadała by się robienia przekierowań jeśli produkt jest już nie aktywny lub usunięty?
Tak, w module jest opcja która pozwala na wykonanie przekierowania dla takich produktów, np. w przypadku gdy produkt nie jest aktywny:
- mamy możliwość przekierowania strony takiego produktu np. na stronę głównej kategorii tego produktu lub na stronę główną,
jeżeli produktu już nie ma w sklepie (został usunięty) to w takim przypadku możemy stronę przekierować na "główną" stronę sklepu
oprócz tego jest tam pare innych funkcji które towarzyszą identyfikacji wyłączonych/usuniętych produktów (np możliwośc zdefiniowana typu przekierowania, wykluczeń itp).
Oraz mam pytanie czy to jest natywny mechanizm w silniku presty ze po podaniu samego id w url przekierwouje na produkt z danym id ale juz z pełnym url?
Za tę funkcję odpowiedzialny jest tzw. canonical redirection, który jest standardowo dostępnym mechanizmem w prestashop.
Jest to funkcja w prestashop, która znajduje się w frontController.php (classes/controllers/front/FrontController.php) i jest ona uruchamiana w sytuacji gdy adres url w przegląarce nie odpowiada temu który jest zdefiniowany w polu "friendly url" danego produktu/kategorii/strony cms itp:
protected function canonicalRedirection($canonical_url = '')
{
if (!$canonical_url || !Configuration::get('PS_CANONICAL_REDIRECT') || strtoupper($_SERVER['REQUEST_METHOD']) != 'GET') {
return;
}
$canonical_url = preg_replace('/#.*$/', '', $canonical_url);
$match_url = rawurldecode(Tools::getCurrentUrlProtocolPrefix() . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
if (!preg_match('/^' . Tools::pRegexp(rawurldecode($canonical_url), '/') . '([&?].*)?$/', $match_url)) {
$params = [];
$url_details = parse_url($canonical_url);
if (!empty($url_details['query'])) {
parse_str($url_details['query'], $query);
foreach ($query as $key => $value) {
$params[Tools::safeOutput($key)] = Tools::safeOutput($value);
}
}
$excluded_key = ['isolang', 'id_lang', 'controller', 'fc', 'id_product', 'id_category', 'id_manufacturer', 'id_supplier', 'id_cms'];
$excluded_key = array_merge($excluded_key, $this->redirectionExtraExcludedKeys);
foreach ($_GET as $key => $value) {
if (!in_array($key, $excluded_key) && Validate::isUrl($key) && Validate::isUrl($value)) {
$params[Tools::safeOutput($key)] = Tools::safeOutput($value);
}
}
$str_params = http_build_query($params, '', '&');
if (!empty($str_params)) {
$final_url = preg_replace('/^([^?]*)?.*$/', '$1', $canonical_url) . '?' . $str_params;
} else {
$final_url = preg_replace('/^([^?]*)?.*$/', '$1', $canonical_url);
}
// Don't send any cookie
Context::getContext()->cookie->disallowWriting();
if (defined('_PS_MODE_DEV_') && _PS_MODE_DEV_ && $_SERVER['REQUEST_URI'] != __PS_BASE_URI__) {
die('[Debug] This page has moved<br />Please use the following URL instead: <a href="' . $final_url . '">' . $final_url . '</a>');
}
$redirect_type = Configuration::get('PS_CANONICAL_REDIRECT') == 2 ? '301' : '302';
header('HTTP/1.0 ' . $redirect_type . ' Moved');
header('Cache-Control: no-cache');
Tools::redirectLink($final_url);
}
}
funkcję kanonicznego przekierowania możemy wyłączyć w zapleczu sklepu.
w ustawieniach "seo & url" (preferencje > ruch / preferences > traffic) jest opcja: https://i.imgur.com/NENQ2Fk.png - możemy ją tam włączyć / wyłączyć.
Komentarze
Prześlij komentarz