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

Redirect 修改SEO模式后如何在PrestaShop中将旧URL重定向到新URL,redirect,prestashop,url-redirection,Redirect,Prestashop,Url Redirection,我已经在PrestaShop后台更改了SEO模式设置(例如,为产品URL添加了.html扩展名) 现在,旧的URL不再工作,它们也不会重定向到新的URL(扩展名为.html的URL) 我希望无论何时更改产品或类别URL的设置,以前的URL都会重定向到新的URL(301永久重定向) 有什么解决方案吗?对于PrestaShop来说并不重要,如果URL以/不以.html结尾,真正的问题是如果您删除了路由中的ID或更改了ID的顺序,如果是这种情况,您需要在.htaccess中创建一个大的重定向列表(针对

我已经在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 />';
}