Wir sind in einer ähnlichen Situation wie du, James. Nach vielem Graben habe ich mir Folgendes ausgedacht:
Die core_url_rewrite
Tabelle ist jetzt veraltet, stattdessen speichert Magento EE 1.13 jetzt die Umschreibungen in enterprise_url_rewrite
.
Tabellen:
enterprise_*_category_rewrite
Verwenden Sie catalog_*_entity_url_key
Tabellen, um die beiden Umschreibtabellen bei der Ausführung neu zu erstellenphp indexer.php --reindex catalog_url_*
Wenn Sie in admin Catalog-> URL Redirects eine 'URL Redirect' für eine benutzerdefinierte URL hinzufügen, wird diese zur enterprise_url_rewrite_redirect
Tabelle hinzugefügt und das Flag für Magento, dass der Index jetzt veraltet ist, wird in die enterprise_url_rewrite_redirect_cl
Tabelle eingegeben, die beim Ausführen php indexer.php --reindex url_redirect
die enterprise_url_rewrite_redirect_rewrite
Tabelle neu erstellt.
Kurz gesagt, jede Tabelle, die mit _cl endet, kann sicher abgeschnitten werden. 'CL' steht für Change Log (Änderungsprotokoll) und wird von Magento verwendet, um zu überprüfen, ob eine Neuindizierung erforderlich ist.
Was die URL Key Tabellen gehen, ich bin immer noch ein bisschen ratlos, warum es zwei URL Schlüsseleinträge einen in catalog_*_entity_url_key
und einen in catalog_*_entity_varchar
(Attribut - ID 90), aber ich nehme an, das ist , was passiert:
Wenn Sie ein neues Produkt / eine neue Kategorie erstellen, verwendet Magento den Namen, um einen url_key zu generieren, der in catalog_*_entity_url_key
AND in platziert catalog_*_entity_varchar
wird. Die von Magento verwendete Primärtabelle ist jedoch die, catalog_*_entity_url_key
da php indexer.php --reindex catalog_url_*
Ihre enterprise_*_category_rewrite
Tabellen leer sind und Produkte / Kategorien in leer sind, wenn Sie sie abschneiden und ausführen Das Frontend zeigt hässliche URLs an, dh http://example.com/catalog/product/view/id/123/etc/etc
(nicht SOE-freundlich) Ich glaube, die beiden Tabellen sind miteinander verwandt und werden zum Erstellen der enterprise_url_rewrite
Tabelle verwendet, da in dieser Tabelle ein 'request_path' gespeichert ist, höchstwahrscheinlich der url_key in der catalog_*_entity_varchar
Tabelle und ein 'identifier', der der primäre ist URL-Schlüssel aus der catalog_*_entity_url_key
Tabelle. Ich könnte mich bei url_key- und varchar-Tabellen völlig irren, also denke ich nur laut nach.
Wie auch immer, um alle Umschreibtabellen erfolgreich abzuschneiden und neu zu erstellen, können Sie Folgendes ausführen:
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;
und dann laufen:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
Wenn Sie auch kürzen enterprise_url_rewrite_redirect
, verlieren Sie alle benutzerdefinierten Weiterleitungen, die Sie in Ihrem Admin-Bereich sehen. Vielleicht ist dies Ihr Ziel, da Sie eine Menge nutzloser URLs hinterlassen haben. Solange Sie die Tabellen '* _entity_url_key' NICHT abschneiden, ist alles in Ordnung.
Unsere Geschichte war etwas anders, da wir nach dem Upgrade von 1.11 auf 1.13 doppelte URL-Schlüssel und größere Probleme mit Produktnamen hatten. Deshalb habe ich dieses schnelle Skript geschrieben, um die catalog_product_entity_url_key
Tabelle und die URL-Schlüssel und URL-Pfade in der catalog_product_entity_varchar
Tabelle mit product zurückzusetzen Namen. Ich habe den folgenden Code angehängt, aber wenn Sie ihn verwenden, verwenden Sie ihn auf eigenes Risiko.
<?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.']';
Der Code kann so angepasst werden, dass die Magentos-FormatKey-Methode hier verwendet wird: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion Leider bin ich auf das Wiki gestoßen, nachdem ich alle Schlüssel aktualisiert habe, sodass ich mich nicht darum gekümmert habe, sie zu aktualisieren alles wieder.
Hoffentlich hilft das :)!
core_url_rewrite
und es hat funktioniert.