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

时间:2019-05-30 08:43:11

标签: redirect prestashop url-redirection

我已经更改了PrestaShop后台的SEO模式设置(例如,添加了.html产品URL扩展名)。

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

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

有解决方案吗?

2 个答案:

答案 0 :(得分:2)

对于PrestaShop,如果URL以 .html 结尾/不存在,则不重要,真正的问题是您是否删除了路径中的ID或更改了ID的顺序(如果这是您的情况下,您将需要在.htaccess中创建大量重定向(针对每个类别),例如以下示例:

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

答案 1 :(得分:1)

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

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

这是一个例子

下面的代码假设您的旧网址采用以下格式:/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 - RedirectMatch old product urls (without ID) to new url

我希望这会有所帮助!