Siamo nella stessa situazione di te James. Dopo molte ricerche, ecco cosa mi è venuto in mente:
La core_url_rewrite
tabella è ora obsoleta, invece Magento EE 1.13 ora memorizza le riscritture enterprise_url_rewrite
.
Tabelle:
enterprise_*_category_rewrite
utilizzare le catalog_*_entity_url_key
tabelle per ricostruire le due tabelle di riscrittura durante l'esecuzionephp indexer.php --reindex catalog_url_*
Quando aggiungi un 'Reindirizzamento URL' nel Catalogo admin-> Reindirizzamenti URL per un URL personalizzato, questo viene aggiunto alla enterprise_url_rewrite_redirect
tabella e il flag per Magento che l'indice è ora obsoleto viene inserito nella enterprise_url_rewrite_redirect_cl
tabella che durante l'esecuzione php indexer.php --reindex url_redirect
ricostruisce la enterprise_url_rewrite_redirect_rewrite
tabella.
Nota veloce, qualsiasi tabella che termina con _cl è sicura da troncare, il 'CL' sta per Change Log ed è usato da Magento per verificare se è necessario reindicizzare.
Per quanto riguarda le tabelle delle chiavi URL, sono ancora un po 'all'oscuro del perché ci sono due voci della chiave URL una dentro catalog_*_entity_url_key
e una in catalog_*_entity_varchar
(attributo id 90), ma suppongo che sia quello che succede:
Quando crei un nuovo prodotto / categoria Magento usa il nome per generare un url_key che viene inserito in catalog_*_entity_url_key
AND in catalog_*_entity_varchar
, ma la tabella principale usata da Magento è la catalog_*_entity_url_key
perché se lo tronchi ed esegui le php indexer.php --reindex catalog_url_*
tue enterprise_*_category_rewrite
tabelle saranno vuote e prodotti / categorie in il frontend mostrerà brutti URL cioè http://example.com/catalog/product/view/id/123/etc/etc
(non compatibili con SOE) Credo che le due tabelle siano correlate e vengano utilizzate per costruire la enterprise_url_rewrite
tabella perché questa tabella memorizza un 'request_path' molto probabilmente l'url_key all'interno della catalog_*_entity_varchar
tabella e un 'identificatore' che è il principale Chiave URL dalla catalog_*_entity_url_key
tabella. Potrei sbagliarmi completamente sulle tabelle url_key e varchar, quindi sto solo pensando ad alta voce.
In ogni caso, per troncare e ricostruire correttamente tutte le tabelle di riscrittura è possibile eseguire:
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;
e quindi eseguire:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
Se tronchi anche enterprise_url_rewrite_redirect
allora perderai tutti i reindirizzamenti personalizzati che vedi nel tuo pannello di amministrazione, forse questo è il tuo obiettivo poiché ti sono rimasti un sacco di URL inutili. Finché NON tronchi le tabelle '* _entity_url_key', starai bene.
La nostra storia era un po 'diversa, perché avevamo duplicati dei codici URL e maggiori problemi con i nomi dei prodotti dalle importazioni Excel dopo l'aggiornamento a 1.13 da 1.11, quindi ho scritto questo veloce script per ripristinare la catalog_product_entity_url_key
tabella e le chiavi URL e i percorsi URL nella catalog_product_entity_varchar
tabella usando il prodotto nomi. Ho allegato il codice seguente, ma se lo usi, lo usi a tuo rischio.
<?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.']';
Il codice può essere modificato per usare il metodo Magentos formatKey qui: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion sfortunatamente mi sono imbattuto nel wiki dopo aver aggiornato tutte le chiavi in modo da non preoccuparmi di ricuperare tutto di nuovo.
Spero che sia d'aiuto :)!
core_url_rewrite
e ha funzionato.