製品の新しい URL 書き換えを作成するかどうかを Magento がどのように決定するかについて、誰か光を当てることができますか? Catalog URL Rewrite reindex プロセスを実行するたびに、core_url_rewrite の行数が約 10,000 行ずつ増加します。その間、製品データは変更されていないのに、新しい URL が生成されるのはなぜですか?
4 に答える
この問題は Magento 1.7 にも存在しますが、1.8 または 1.9 についてはわかりません。Magento は古いエントリを削除しないようです。これにより、データベースが大幅に遅くなる可能性があります。これを解決する最も簡単な方法は、テーブルを切り捨ててインデックスを再作成することです。
- mysql にログインし、適切なデータベースを選択 (使用) します。
- 次のクエリを実行します。
truncate table core_url_rewrite;
- Magento ルート (コマンドライン) のシェル フォルダーに移動し、次のコマンドを実行します。
php -f indexer.php -- -reindex catalog_url
- または、管理者でこれを行うこともできます: システム > インデックス管理; 再インデックス カタログ URL の書き換え
次に、管理者を確認します: [カタログ] > [URL 書き換え管理] で、新しいエントリが作成されているかどうかを確認します。これにアイテムが表示されない場合、URL の書き換えは機能しません。
次の 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_ids のリストが表示されるはずです
`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
... データが変更されているかどうかはチェックされません。それが必要な場合は、そのクラスをオーバーライドし、機能を書き直して違いを比較できます。
私は Magento 1.8 を使用しており、私の core_url_rewrite テーブルには約 500 万ありました!!!! 記録。最後に、関数 beforeSave を Mage_Catalog_Model_Product_Attribute_Backend_Urlkey に上書きし、製品名の最初の 5 語から独自の URL キーを生成しました。最初の 5 つの単語が一意でない場合は、いくつかの数字を追加します。誰かが私のコードに興味を持っている場合は、いくつかのスニペットを投稿できます。
Mage_Catalog_Model_Product_Attribute_Backend_Urlkey を上書きした後、core_url_rewrite を切り捨て、インデックスを再構築しました。最終的に、約 60.000 の URL を取得しました...そして、再インデックス プロセスは新しい URL を追加しません。
ただし、core_url_rewrite テーブルを切り捨てて再構築すると、カスタム URL の書き換えが失われることに注意する必要があります。また、seo の頭に予期しない問題が発生することもあります。すべての 302er リダイレクトが失われる原因
乾杯