すべてのURL書き換えを消去-エンタープライズ(1.13)


27

インポートがめちゃくちゃになった後、削除する必要があるURL書き換えの負荷が残っています。

Enterprise 1.13を実行しています

コミュニティでこの問題が発生したとき、単に切り捨てcore_url_rewrite、インデックスを再作成しました。

ただし、エンタープライズでは、書き換えを制御するさまざまなテーブルがいくつかあることに気付きました。

  • enterprise_url_rewrite
  • enterprise_url_rewrite_category_cl
  • enterprise_url_rewrite_product_cl
  • enterprise_url_rewrite_redirect
  • enterprise_url_rewrite_redirect_cl
  • enterprise_url_rewrite_redirect_rewrite

それらすべてを切り捨てても安全ですか?

これらのテーブルを切り捨ててはならないことを誰かが教えてくれることを完全に期待しています。


「書き換えを制御するさまざまなテーブル」とはどういう意味ですか?EEでは、通常CEと同じことを行いました。切り捨てcore_url_rewriteて動作しました。
マリウス

こんにちはマリウス。これらは、書き換えを制御するように見えるテーブルです。core_url_rewritesを切り捨てましたが、adminにリストされているものには効果がありません。enterprise_url_rewrite enterprise_url_rewrite_category_cl enterprise_url_rewrite_product_cl enterprise_url_rewrite_redirect enterprise_url_rewrite_redirect_cl enterprise_url_rewrite_redirect_rewriteありがとう
JamesAllwood

あ、ごめんなさい。私の悪い。「Enterprise 1.13を実行しています」というこの行を見逃しました。EE 1.13の経験はまだありません。今のところ無視してください。
マリウス

1
考慮すべき点:gist.github.com/Vinai/5451584
B00MER

1
私たちは最近、Magento EE 1.12をEE 1.13に更新し、私たちのWebサイトに、発生する可能性のある変更や問題に関する投稿を書きました:code4business.de/update-magento-enterprise-edition-1-13-0-2 / ...投稿のページ下部に英語の翻訳があります。
user2830524

回答:


30

私たちはジェームズと同じような状況にあります。たくさん掘った後、これが私が思いついたものです:

core_url_rewriteテーブルが廃止され、代わりにMagentoのEE 1.13今で書き換えを記憶しますenterprise_url_rewrite

テーブル: テーブルをenterprise_*_category_rewrite使用catalog_*_entity_url_keyして、実行時に2つの書き換えテーブルを再構築しますphp indexer.php --reindex catalog_url_*

カスタムURLの管理カタログ-> URLリダイレクトで「URLリダイレクト」を追加すると、enterprise_url_rewrite_redirectテーブルに追加され、インデックスが現在古くなっているというMagentoのフラグがenterprise_url_rewrite_redirect_clテーブルに入力され、実行時にテーブルがphp indexer.php --reindex url_redirect再構築されenterprise_url_rewrite_redirect_rewriteます。

簡単な注意、_clで終わるテーブルは切り捨てても安全です。「CL」はChange Logの略で、Magentoはインデックスの再作成が必要かどうかを確認するために使用します。

限りURLキーテーブルが行くように、私はまだ2 URLのキーが1つあっエントリ理由としてビット無知だcatalog_*_entity_url_keyと1つのcatalog_*_entity_varchar(属性ID 90)が、私は何が起こるか、これがあると仮定します。

新しい製品/カテゴリを作成すると、Magentoは名前を使用してでcatalog_*_entity_url_keyANDに配置されるurl_keyを生成しcatalog_*_entity_varcharますが、Magentoが使用するプライマリテーブルは、catalog_*_entity_url_key切り捨てて実行php indexer.php --reindex catalog_url_*するとenterprise_*_category_rewriteテーブルが空になり、製品/カテゴリがフロントエンドはいURLを表示しますhttp://example.com/catalog/product/view/id/123/etc/etc(SOEフレンドリーではありません)2つのテーブルは関連しており、enterprise_url_rewriteテーブルを構築するために使用されると信じています。このテーブルはおそらくcatalog_*_entity_varcharテーブル内のurl_key とプライマリである「識別子」を格納しているためですcatalog_*_entity_url_keyテーブルのURLキー。url_keyテーブルとvarcharテーブルについて完全に間違っている可能性があるため、大声で考えています。

とにかく、すべての書き換えテーブルを正常に切り捨てて再構築するには、次を実行します。

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE `core_url_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
SET FOREIGN_KEY_CHECKS = 1;

次に実行します:

sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect

また、切り捨てるenterprise_url_rewrite_redirectと、管理パネルに表示されるすべてのカスタムリダイレクトが失われます。これは、無数の役に立たないURLが残っているため、おそらくこれが目標です。'* _entity_url_key'テーブルを切り捨てない限り、問題ありません。

私はリセットするために、この迅速なスクリプトを書いたように、我々は1.11から1.13へのアップグレード後にExcelの輸入から製品名と重複URLのキーと主要な問題を抱えていたので、私たちの物語は、少し違っていたcatalog_product_entity_url_key中で、テーブルやURLのキーとURLのパスをcatalog_product_entity_varchar、製品を使用してテーブル名前。以下にコードを添付しましたが、使用する場合は自己責任で使用してください。

<?php
include_once('app/Mage.php');
Mage::app();

$dbHandle          = Mage::getSingleton('core/resource')->getConnection('core_write');
$productCounter    = 0;
$nameFixCounter    = 0;
$vUrlKeyFixCounter = 0;
$urlPathCounter    = 0;
$urlKeyCounter     = 0;
$productCollection = $dbHandle->query("SELECT entity_id, sku FROM catalog_product_entity");

while($product = $productCollection->fetch()) {    
  $dataString       = null;

  $oldProductName   = $dbHandle->query("SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '".$product['entity_id']."' AND attribute_id = 65")->fetch();
  $oldVarcharUrlKey = $dbHandle->query("SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '".$product['entity_id']."' AND attribute_id = 90")->fetch();
  $oldUrlPath       = $dbHandle->query("SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '".$product['entity_id']."' AND store_id = 0 AND attribute_id = 91")->fetch();
  $oldUrlKey        = $dbHandle->query("SELECT value FROM catalog_product_entity_url_key WHERE entity_id = '".$product['entity_id']."'")->fetch();

  $newProductName   = preg_replace('/\s+/', ' ', trim(preg_replace('/[^\x20-\x21\x23-\x2B\x2D-\xE7]/', ' ', $oldProductName['value'])));
  $newUrlKey        = preg_replace('/\s+/', '-', trim(preg_replace('/[^\x30-\x39\x61-\x7A]/', ' ', strtolower($newProductName))));

  if (strcmp($oldProductName['value'], $newProductName)) {
    echo "-[".$oldProductName['value']."]\n";
    echo "+[".$newProductName."]\n";
    $dbHandle->query('UPDATE catalog_product_entity_varchar SET value = "'.$newProductName.'" WHERE entity_id = "'.$product['entity_id'].'" AND attribute_id = 65');
    ++$nameFixCounter;
  }

  if (strcmp($oldVarcharUrlKey['value'], $newUrlKey)) {
    echo "-[".$oldVarcharUrlKey['value']."]\n";
    echo "+[".$newUrlKey."]\n";
    if ($oldVarcharUrlKey['value'] === null) {
      $dbHandle->query("INSERT INTO catalog_product_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) VALUES ('4', '90', '0', '".$product['entity_id']."', '".$newUrlKey."')");
    } else {
      $dbHandle->query("UPDATE catalog_product_entity_varchar SET value = '".$newUrlKey."' WHERE entity_id = '".$product['entity_id']."' AND attribute_id = 90");
    }
    ++$vUrlKeyFixCounter;
  }

  if (strcmp($oldUrlPath['value'], $newUrlKey.'.html')) {
    echo "-[".$oldUrlPath['value']."]\n";
    echo "+[".$newUrlKey.".html]\n";
    if ($oldUrlPath['value'] === null) {
      $dbHandle->query("INSERT INTO catalog_product_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) VALUES ('4', '91', '0', '".$product['entity_id']."', '".$newUrlKey.".html')");
    } else {
      $dbHandle->query("UPDATE catalog_product_entity_varchar SET value = '".$newUrlKey.".html' WHERE entity_id = '".$product['entity_id']."' AND store_id = 0 AND attribute_id = 91");
    }
    ++$urlPathCounter;
  }

  if (strcmp($oldUrlKey['value'], $newUrlKey)) {
    echo "-[".$oldUrlKey['value']."]\n";
    echo "+[".$newUrlKey."]\n";
    if ($oldUrlKey['value'] === null) {
      $dbHandle->query("INSERT INTO catalog_product_entity_url_key (entity_type_id, attribute_id, store_id, entity_id, value) VALUES ('4', '90', '0', '".$product['entity_id']."', '".$newUrlKey."')");
    } else {
      $dbHandle->query("UPDATE catalog_product_entity_url_key SET value = '".$newUrlKey."' WHERE entity_id = '".$product['entity_id']."'");
    }
    ++$urlKeyCounter;
  }

  $report  = "[".++$productCounter."] ";
  $report .= "NAME: [".(strcmp($oldProductName['value'], $newProductName)?'!=':'==')."] ";
  $report .= "V_KEY: [".(strcmp($oldVarcharUrlKey['value'], $newUrlKey)?'!=':'==')."] ";
  $report .= "PATH: [".(strcmp($oldUrlPath['value'], $newUrlKey.'.html')?'!=':'==')."] ";
  $report .= "KEY: [".(strcmp($oldUrlKey['value'], $newUrlKey)?'!=':'==')."]\n";
  echo $report;

}
echo 'Total Products: ['.$productCounter.'] Names: ['.$nameFixCounter.'] V_Keys: ['.$vUrlKeyFixCounter.'] Paths: ['.$urlPathCounter.'] Keys: ['.$urlKeyCounter.']';

ここでMagentos formatKeyメソッドを使用するようにコードを微調整できます:http : //www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion再びすべて。

それが役立つことを願っています:)!


sudo php indexer.php --reindex catalog_url_catalogする必要がありますsudo php indexer.php --reindex catalog_url_category
マティアスツァイス

今も同じことをしようとしています。ただし、すべてのテーブルを切り捨てた後、直接のカテゴリと製品のURLのみが再インデックス付けされます。などのカテゴリの商品のエントリが見つかりませんでしたcatalog/product/view/id/XXX/category/YYY。これがあなたにとって同じであることを確認してください。私はこれについてちょっと無知です...それはバグですか、何か間違っていますか?1.13.0.2の新規インストールでも同じことをしようとしましたが、同じことが起こりました。書き換えはフロントエンドで正常に機能しますが、カテゴリは設定されていません。
fmrng

9

テスト環境でEE 1.13をいじり回したことや、先ほど行った短いテストに基づいて、これらのテーブルを単純に切り捨ててから、CLIからすべてのURLインデックスを手動で再構築できるはずです。

* _clテーブルは、catalog_product_entity_url_keyテーブルにあるTRIGGERSで使用されます。これらの* _clテーブルに挿入するレコードは、保存後にインデックスを再作成する必要があるものを示すために使用されると思います。

これが私がしたことです。CLIツールを使用してインデックスを再構築した後、すべてがうまくいくように見えました。MySql切り捨て…

TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_url_rewrite`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `core_url_rewrite`;

次に、CLIで…

php shell/indexer.php --reindex catalog_url_product
php shell/indexer.php --reindex catalog_url_category
php shell/indexer.php --reindex url_redirect

あなたの結果を教えてください…マリウスのように、私はまだEE 1.13サイトを構築しておらず、想像してからそれをいじくり回した経験しかありません。:)


1
こんにちはデビッド、あなたの詳細な応答をありがとう。あなたの指示を試しましたが、残念ながら運がありません。書き換えはすべてクリアされましたが、indexer.phpを実行しても何も再生成されませんでした。一晩で、Magentoのサポートが実際に私に戻ってきました。彼らのアドバイスは、URLの書き換えが次の場所に保存されるようになったことです。再び今運。私は彼らにさらなる説明を求めたので、彼らが私に戻ったらすぐにあなたに知らせます。
ジェームズオールウッド

これを見ているときに私が気づいたことの一つは、URLの書き換えが中に保存されているということであったenterprise_url_rewritecore_url_rewrite彼らは前にあったように。catalog_*_entity_url_keyテーブルには、インデクサーで使用するためのurl-キーを使用してレプリケート表のように見える、と彼らはまた、URLの書き換えに関連するトリガを持つテーブルです。
davidalger

@ Francesco、1.12からのアップグレード後に以前にそのスクリプトを実行しましたか?そうでない場合は、実行する必要があることが予想されます。これは、文書化された1.12から1.13へのアップグレードプロセスの一部であるため、そのバグを呼び出すことはありません。
-davidalger

@davidalger:スクリプトはほぼ正常に動作します(いくつかの奇妙なURLを作成しますが、ごく少数です)ただし、このEEリリースではURL書き換え機能は非常に弱いです(たとえば、製品のurl-keyを変更して保存するには、 t期待どおりに動作します)
Fra 14年

この答えは受け入れられるべきです。EE 1.13でこの動作を確認できます。
musicliftsme

4

TRUNCATEの使用に関する注意:

TRUNCATE TABLE `enterprise_url_rewrite`;

外部キー参照が原因でエラーが発生します。

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`customerx_dev`.`enterprise_catalog_category_rewrite`, CONSTRAINT `FK_415B32DA3DF924D5C803CF24EB3AC1D9` FOREIGN KEY (`url_rewrite_id`) REFERENCES `customerx_dev`.`enterprise_url_rewrite` (`url_rewrite_i)

このような切り捨て/削除コマンドを実行すると動作します:

TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `core_url_rewrite`;
DELETE FROM `enterprise_url_rewrite`;

使用SET FOREIGN_KEY_CHECKS = 0;あなたの前TRUNCATE ...SET FOREIGN_KEY_CHECKS = 1;後、一番下にDELETE FROM ...
オレグ

4

単純な答えは「いいえ」です。少なくとも結果がわからない場合、これらのテーブルを切り捨てることは安全ではありません

  • すべての書き換えテーブルを切り捨て、再インデックスを実行すると、作業サイトにつながります

しかしながら:

  • あなたはすべてのカスタム書き換えを失います(それは正常です)
  • Catalog -> Url Redirect(EE 1.13.1では)空になります( Magentoによるとバグのように見えますが、これは1.13.1で予想される動作です)(以下のコメントも参照してください)

2
Catalog -> Url Redirectシステム以外のリライトのみを示すものを追加したいと思います。したがって、ここではカスタムの書き換えのみが表示されます。つまり、の行enterprise_url_rewrite.system = 0
musicliftsme 14

はい、そのとおりです。Magentoサポートチームから最後に得た情報で答えを改善しました。あなたが望むなら私の答えを改善して自由に感じる
フラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.