繁体   English   中英

magento url重写没用?

[英]magento url rewrite useless?

我要提两点。

第一点。 我注意到一种奇怪的行为,很可能是一个bug。 我配置了一个新的Magento干净实例(没有其他模块,所以从头开始)和一个空数据库。 我在根目录下创建了3个类别。 3个产品,每个类别一个。 就像是:

Cat 1
+ Prod 1
Cat 2
+ Prod 2
Cat 3
+ Prod 3

如果我更改类别的顺序,那么“Cat 3”就在“Cat 2”之前,如下所示:

Cat 1
+ Prod 1
Cat 3
+ Prod 3
Cat 2
+ Prod 2

我只需要在类别管理屏幕上将“Cat 3”拖放到“cat 2”上方。 所以cat2和cat3的“订单”号实际上是交换的。

但url索引进程重新索引所有类别的所有产品(URL REWRITE索引)! 我分析了SQL日志,它实际上对数据库中的每个产品进行了INSERT。 我看到在core_url_rewrite中插入“Prod 1”,“Prod 2”和“Prod 3”。

这是一个错误,因为“Cat 3”保持相同的父类别,因此:1)不需要在“Cat 3”中重写产品(产品名称没有改变,类别名称没有改变!! )2)无需重写与其他类别相关的产品

实际上,通过选择,我可以看到core_url_rewrite表的行是相同的(确实没有更改名称!产品和产品之上的任何类别之间没有关联更改!)

这是我从日志文件中看到的一个SQL查询我移动类别:

        SQL: INSERT INTO `core_url_rewrite` (`store_id`,`category_id`,`product_id`,`id_path`,`request_path`,`target_path`,`is_system`) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE store_id = VALUES(`store_id`), category_id = VALUES(`category_id`), product_id = VALUES(`product_id`), id_path = VALUES(`id_path`), request_path = VALUES(`request_path`), target_path = VALUES(`target_path`), is_system = VALUES(`is_system`)
BIND: array (
  0 => '1',
  1 => NULL,
  2 => '4',
  3 => 'product/4',
  4 => 'testun.html',
  5 => 'catalog/product/view/id/4',
  6 => 1,
)
AFF: 0
TIME: 0.0005

实际上,更糟糕的是,它会插入已存在的行,因此它实际上不会插入任何内容。 插入失败(您可以看到“AFF:0”表示没有插入任何内容)处理每个产品都是浪费时间,并尝试插入可能已经存在的东西!

第二点我发现了另一个错误/奇怪的行为。 如果我有2个具有相同名称的产品(可能会发生),那么url键是相同的(默认情况下)。 复制产品以创建新产品时,BTW网址密钥默认也相同。

所以reindex过程变得疯狂。 例如,2个名为“camera”的产品将重新打包,如下所示:

camera-1.html
camera-2.html

我很好。 但是,如果现在我重新索引一切,那就变得疯狂了。 它将改变这些产品的URL重写(即使我没有更改与这些产品相关的任何内容)。 它将更新这样的2个产品:

UPDATE camera-1.html  => camera-3.html 
UPDATE camera-2.html  => camera-4.html 

并且如果启用了设置,则插入重定向(因此以前的链接不会丢失),有些像是

INSERT camera-1.html , camera-3.html ,RP
INSERT camera-2.html , camera-4.html , RP

RP选项是关于永久重定向。

所以2无用的更新和2无用插入什么都没有。 如果我再次重新索引,我等待结束,立即重新索引,然后Magento做4次更新,4次插入等等。为什么? 重新索引之间的任何数据都没有变化:-)

如果您有5 000个具有相同名称的产品(就像我有的那样),那么它的10 000个更新和10 000(真实)插入什么都没有... core_url_rewrite的大小每天都会一次又一次地增加。 Suration非常高注意:我有充分的理由让5 000种产品具有完全相同的名称:-)无论我的理由是什么,这看起来很奇怪。

你已经检查了这个吗? 使用全新安装的magento和日志文件非常容易检查。

最后一件事是 ,为什么我们需要core_url_rewrite表? 这是magento性能问题的主要原因之一!

4行php代码+ htaccess url重写将完成相同的工作,不需要数据库表(除了自定义URL重写或CMS页面)。 一种动态生成产品网址的方法(根据需要根据名称和类别)和一种生成类别网址的方法。 然后htaccess重定向。 您只需要在网址中使用关键字即可知道它是指向产品或类别的链接及其ID。 就像是:

my-cat/camera-112-p.html

htacces URL重写检测到它是产品的链接(因为-p.htm),它从url(112)获取产品ID并相应地重定向用户。 拥有产品ID可能看起来很难看或SEO的问题,但我不这么认为(没有你能读到的那么糟糕)。 它必须与最大的好处相平衡:1)不再有大表2​​)无需重新索引这个表(这需要几个小时,比如8小时,有很多magento网站)。 此过程可能会导致很多超时问题,锁定等。

至少这应该可以通过选项(或模块)。 另请注意,您甚至不需要关心永久重定向,因为链接中的内容(文本)无关紧要! 只是身份证很重要。

它存在吗? 如果是的话,我会定义购买它来对这个复杂的混乱机制说“再见”(带有错误)

任何反馈意见都会受到高度赞赏。 (特别是如果你发现magento的行为有任何理性,考虑到与使用/管理这个表相关的不良表现,所以必须高度赞赏理性:-))

谢谢罗德

第一点和第二点似乎已得到解决,请参阅EE 1.13.0.2的注释(今天发布,CE 1.7即将推出): http//www.magentocommerce.com/knowledge-base/entry/ee113-later-release-notes #PROD-URL唯一

但是,值得解决一些问题。

  • 为什么URL重写以这种方式工作? 因为这就是他们的工作方式 - 这就是他们创建/演变的方式,包括当两个产品具有相同的url_key时你注意到的赛车重写错误。
  • 根据大量的基准测试和经验,我可以说core_url_rewrite不是 “Magento性能不佳的主要原因”。 毫无疑问,重新索引过程可能很糟糕。
  • 该URL改写表必要的,一般的自定义重写。 建议操纵服务器配置文件(例如Apache .htaccess )以添加重写不能认为Magento是一个可以在没有直接开发人员知识的情况下进行修改和扩展的应用程序(例如,由店主)。
  • 使用pretty-urls mod_rewrite模式的建议对任何与SEO有关的商店都不合适,我向你保证,URL路径对于排名/相关性非常重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM