修改SEO模式后,如何在PrestaShop中将旧URL重定向到新URL



我已经更改了PrestaShop后台的SEO架构设置(例如,为产品URL添加了.html扩展(。

现在,旧 URL 不再起作用,也不会重定向到新 URL(扩展名为 .html 的 URL(。

我希望每当我更改产品或类别 URL 的设置时,以前的 URL 都会重定向到新的 URL(301 永久重定向(。

有什么解决办法吗?

对于 PrestaShop 来说,如果 URL 以/不带 .html 结尾并不重要,真正的问题是您是否删除了路由中的 ID 或更改了 ID 的顺序,如果是这种情况,您将需要在 .htaccess 中创建一个大型重定向列表(针对每个类别(,如以下示例所示:

Redirect 301 /3-my-old-category-url /my-new-category-url

默认情况下,PrestaShop 不会根据您的更改生成重定向规则来处理旧 URL(管理起来会很复杂,尤其是在您连续进行多个更改的情况下(。

您必须启动一次性脚本来生成这些永久重定向规则 (301(。

下面是一个示例

下面的代码假设您的旧 URL 采用以下格式:/category/product ,根据需要进行调整。

<?php
include('config/config.inc.php');
include('init.php');
$context = Context::getContext();
$products = Db::getInstance()->ExecuteS('
SELECT p.id_product, pl.link_rewrite prod_url, cl.link_rewrite cat_url
FROM '._DB_PREFIX_.'product p
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product)
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default)
WHERE p.active = 1 AND cl.id_lang = 1 AND cl.id_shop = 1 AND pl.id_lang = 1 AND cl.id_shop = 1');
foreach ($products as $p)
{
    $new_url = $context->link->getProductLink(new Product((int)$p['id_product']));
    echo 'RewriteRule ^'.$p['cat_url'].'/'.$p['prod_url'].'$ '.$new_url.' [L,R=301]<br />';
}

将此脚本放在您的PrestaShop根文件夹中并启动它。然后,将结果复制并粘贴到您的 .htaccess 文件中。

您还可以检查此相关问题:PrestaShop - 重定向将旧产品网址(无 ID(与新网址匹配

我希望这有帮助!

最新更新