如何编写自定义脚本迁移Magento 2网站商品URL目标路径至其他站点?
解决URL重定向失效与批量商品URL生成的高效方案
先排查重定向失效的核心原因
- 检查服务器配置规则:不管用Nginx还是Apache,确认重定向规则的优先级,有没有被其他规则覆盖。比如Nginx里
rewrite规则要放在正确的server块下,Apache的RedirectMatch要确保没有冲突的.htaccess规则。 - 验证目标URL有效性:手动访问新站点的目标URL,确认返回200状态码,避免因目标页面不存在导致重定向失效。
- 清空缓存:服务器、CDN甚至浏览器缓存都可能导致新规则不生效,先清空所有层级的缓存再测试。
批量生成URL的脚本实现
Python脚本(适配CSV商品列表)
如果你的商品信息存在CSV里(比如包含SKU、旧商品URL等字段),可以用这个脚本批量生成新旧URL映射,甚至直接输出服务器重定向规则:
import csv # 配置新旧站点的路径模板 OLD_URL_TEMPLATE = "https://old-site.com/product/{sku}" NEW_URL_TEMPLATE = "https://new-site.com/item/{sku}" # 读取CSV文件(假设第一列是SKU) with open('product_list.csv', 'r', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) next(reader) # 跳过表头行 # 生成Nginx重定向规则,也可以改成输出CSV映射 for row in reader: sku = row[0].strip() old_url = OLD_URL_TEMPLATE.format(sku=sku) new_url = NEW_URL_TEMPLATE.format(sku=sku) print(f"rewrite ^{old_url.replace('.', '\\.')}$ {new_url} permanent;")
运行后直接把输出的规则复制到Nginx配置文件里即可。
Bash脚本(处理纯URL列表)
如果已经有旧URL的文本列表(每行一个URL),用sed快速替换生成新URL:
# 将urls.txt里的旧URL替换成新URL,输出到new_urls.txt sed 's/https:\/\/old-site\.com\/product/https:\/\/new-site\.com\/item/g' urls.txt > new_urls.txt
更高效的通配符重定向方案
如果新旧站点的URL结构有固定规律(比如只是域名和路径前缀不同),完全不用逐个生成URL,直接在服务器配置里写通配符规则:
Nginx配置示例
server { listen 80; server_name old-site.com; # 匹配所有/product/开头的路径,重定向到新站点对应路径 rewrite ^/product/(.*)$ https://new-site.com/item/$1 permanent; }
Apache配置示例
<VirtualHost *:80> ServerName old-site.com RedirectMatch permanent ^/product/(.*)$ https://new-site.com/item/$1 </VirtualHost>
这种方式能一次性处理所有符合规则的URL,比批量生成单个规则高效得多。
CSV导入问题的排查要点
如果之前用CSV导入迁移商品时出问题,先检查这几点:
- 确认CSV里的URL没有多余空格、转义字符或者格式错误(比如缺少协议头
https://) - 核对导入工具要求的列名格式,比如是否需要明确标注
old_url和new_url作为列标题 - 测试少量数据导入,排查是否是特定商品的特殊字符导致导入失败
内容的提问来源于stack exchange,提问作者vyshnavi
相关产品推荐
相关产品推荐

