You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量重写PrestaShop商品友好URL(非.htaccess文件)

批量修复PrestaShop商品友好URL混乱问题

遇到这种批量URL和商品名称不匹配的情况确实头疼,手动逐个生成效率太低,下面给你几个靠谱的批量解决方法,亲测适配大多数PrestaShop版本(1.6/1.7都适用):

方法一:数据库删除+后台自动生成(最简便)

PrestaShop的友好URL重写规则存在ps_url_rewrite表中(如果你的数据库前缀不是ps_,记得替换成实际前缀,比如presta_url_rewrite),商品对应的记录entity_type字段值为product,id_entity关联商品表ps_product的id_product。

步骤:

  1. 先备份数据库! 这是重中之重,避免误操作导致数据丢失:

    -- 备份URL重写表(替换前缀为你的实际前缀)
    CREATE TABLE ps_url_rewrite_backup AS SELECT * FROM ps_url_rewrite;
    
  2. 删除所有商品类型的URL重写记录:

    DELETE FROM ps_url_rewrite WHERE entity_type = 'product';
    
  3. 触发系统自动生成正确URL:
    进入PrestaShop后台,根据版本找到对应位置:

    • 1.7版本:Shop Parameters > Traffic & SEO > URL rewriting,点击Generate rewrite rules按钮
    • 1.6版本:首选项 > SEO & URL,点击生成重写规则按钮
      这个操作会批量重新生成所有商品的友好URL,完全基于商品名称自动生成正确的slug。

注意:如果有部分商品是你手动设置的自定义URL,删除后会被系统覆盖,建议提前备份这些自定义记录:

CREATE TABLE ps_url_rewrite_custom_backup AS SELECT * FROM ps_url_rewrite WHERE entity_type = 'product' AND meta_url NOT LIKE '%-p-%';

方法二:PHP脚本精准更新(适合保留自定义URL的场景)

如果你不想删除所有商品URL,只想批量修正错误的记录,可以写一个简单的PHP脚本,调用PrestaShop内置函数生成正确的slug并更新数据库:

  1. 在PrestaShop根目录创建fix_product_urls.php文件,内容如下:

    <?php
    require_once(dirname(__FILE__).'/config/config.inc.php');
    require_once(dirname(__FILE__).'/init.php');
    
    // 获取当前后台语言(如果是多语言,可循环遍历所有语言ID)
    $id_lang = Context::getContext()->language->id;
    
    // 获取所有商品
    $products = Product::getProducts($id_lang, 0, 0, 'id_product', 'ASC');
    
    foreach ($products as $product) {
        $product_obj = new Product($product['id_product']);
        // 用PrestaShop内置函数生成正确的URL slug
        $slug = Tools::link_rewrite($product_obj->name);
        // 拼接标准商品URL格式:slug-p-商品ID.html
        $new_url = $slug . '-p-' . $product['id_product'] . '.html';
    
        // 更新数据库中的URL记录
        Db::getInstance()->update(
            'url_rewrite',
            array('meta_url' => $new_url),
            'entity_type = "product" AND id_entity = ' . (int)$product['id_product'] . ' AND id_lang = ' . (int)$id_lang
        );
    
        echo "已修复商品ID {$product['id_product']} 的URL:{$new_url}<br>";
    }
    
    echo "<br>所有商品URL修复完成!";
    ?>
    
  2. 通过浏览器访问这个脚本(比如https://你的店铺域名/fix_product_urls.php),或者用命令行运行:

    php fix_product_urls.php
    
  3. 运行完成后立即删除这个脚本,避免安全风险。

提示:如果你的店铺是多语言版本,需要循环遍历所有语言ID,把$id_lang换成语言ID数组的循环即可,比如$languages = Language::getLanguages(true); foreach($languages as $lang) { $id_lang = $lang['id_lang']; ... }

注意事项

  • 操作前一定要备份数据库,尤其是直接修改数据库的操作
  • 如果使用脚本方法,确保你的PHP版本符合PrestaShop的要求,避免函数兼容问题
  • 生成新URL后,可以在前台测试几个商品,确认URL和商品名称匹配

内容的提问来源于stack exchange,提问作者Mireck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:01:25