有人可以了解Magento如何确定是否为产品创建新的URL重写?每次运行Catalog URL Rewrite reindex进程时,core_url_rewrite中的行数大约增加10,000行。由于没有同时修改产品数据,为什么会生成新的URL?
答案 0 :(得分:1)
这个问题在Magento 1.7中仍然存在,但我对1.8或1.9没有任何线索。 Magento似乎没有删除旧条目。这会严重降低您的数据库速度。解决此问题的最简单方法是截断表并重新索引它。
truncate table core_url_rewrite;
php -f indexer.php -- -reindex catalog_url
然后检查管理员:目录> URL重写管理,并查看是否已创建新条目。如果这显示没有项目,URL重写不会工作!
答案 1 :(得分:0)
您可以运行以下SQL来查找哪些URL属于不存在的产品:
SELECT `cur`.`product_id`
FROM `core_url_rewrite` AS `cur`
LEFT OUTER JOIN `catalog_product_entity` AS `cpe`
ON `cur`.`product_id` = `cpe`.`entity_id`
WHERE `cpe`.`entity_id` IS NULL
AND `cur`.`product_id` IS NOT NULL
...你应该看到
中不存在的entity_id列表`catalog_product_entity`
EcomDev有一个免费的URL重写模块(http://shop.ecomdev.org/url-rewrite-indexer.html),我发现它很有用。
修改强>
要回答这个问题,会生成新的URL,因为在以下情况下触发了URL重新索引:
Mage_Catalog_Model_Indexer_Url::reindexAll()
...这是一个包装:
Mage_Catalog_Model_Url::refreshRewrites
...如果数据已更改,则不进行检查。如果这是您需要的,您可以覆盖该类并重新编写功能以比较差异。
答案 2 :(得分:0)
我正在使用Magento 1.8,而我的core_url_rewrite表大约有5百万!记录。 最后,我在Mage_Catalog_Model_Product_Attribute_Backend_Urlkey中覆盖了函数beforeSave,并在productname的前五个单词中生成了我自己的url密钥。如果前5个单词不唯一,我会附加一些数字。如果有人对我的代码感兴趣,我可以发布一些片段。
覆盖Mage_Catalog_Model_Product_Attribute_Backend_Urlkey后,我截断了core_url_rewrite并重建了索引。最后我得到了大约60,000个网址......并且重新索引流程并没有添加新网址。
但是你必须记住,在截断和重建core_url_rewrite表时,自定义url重写会丢失。也许你的头脑中有一些意想不到的问题。因为所有302er重定向都会丢失
欢呼声
答案 3 :(得分:0)
由于Magento Enterprise Edition和Community Edition早期版本中的产品和类别索引系统中存在已知错误,因此出现此问题。
有关类别和产品网址的研究和解决方案的根本原因分析和额外确认的完整说明,请访问Magento core_url_rewrite table excessively large