Estamos en una situación similar a la tuya James. Después de mucho excavar esto es lo que se me ocurrió:
La core_url_rewrite
tabla ahora está en desuso, en cambio Magento EE 1.13 ahora almacena las reescrituras enenterprise_url_rewrite
.
Tablas:
enterprise_*_category_rewrite
usocatalog_*_entity_url_key
tablas para reconstruir las dos tablas de reescritura cuando ejecutephp indexer.php --reindex catalog_url_*
Cuando agrega una 'Redirección de URL' en el Catálogo de administración-> Redirecciona URL para una URL personalizada, se agrega a la enterprise_url_rewrite_redirect
tabla y el indicador para Magento de que el índice ahora está desactualizado se ingresa en la enterprise_url_rewrite_redirect_cl
tabla que, cuando se ejecuta, php indexer.php --reindex url_redirect
reconstruye elenterprise_url_rewrite_redirect_rewrite
tabla.
Nota rápida, cualquier tabla que termine en _cl es segura de truncar, el 'CL' significa Registro de cambios y Magento lo utiliza para verificar si es necesario volver a indexar.
En lo que respecta a las tablas de clave de URL, todavía no tengo idea de por qué hay dos entradas de clave de URL una en catalog_*_entity_url_key
y una encatalog_*_entity_varchar
(id. De atributo 90), pero supongo que esto es lo que sucede:
Cuando crea un nuevo producto / categoría, Magento usa el nombre para generar una url_key que se coloca en catalog_*_entity_url_key
AND en el catalog_*_entity_varchar
, pero la tabla principal utilizada por Magento es catalog_*_entity_url_key
porque si la trunca y ejecuta, php indexer.php --reindex catalog_url_*
sus enterprise_*_category_rewrite
tablas estarán vacías y los productos / categorías en la interfaz mostrará urls feas, es decir http://example.com/catalog/product/view/id/123/etc/etc
(no compatible con SOE). Creo que las dos tablas están relacionadas y se utilizan para construir la enterprise_url_rewrite
tabla porque esta tabla almacena una 'request_path' muy probablemente la url_key dentro de la catalog_*_entity_varchar
tabla y un 'identificador' que es el primario Clave URL de la catalog_*_entity_url_key
tabla. Podría estar completamente equivocado sobre las tablas url_key y varchar, así que solo estoy pensando en voz alta.
De todos modos, para truncar y reconstruir con éxito todas las tablas de reescritura que puede ejecutar:
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;
y luego ejecuta:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
Si también truncas enterprise_url_rewrite_redirect
, perderá todas las redirecciones personalizadas que ve en su panel de administración, tal vez este sea su objetivo, ya que se quedó con un montón de URL inútiles. Mientras NO trunques las tablas '* _entity_url_key', estarás bien.
Nuestra historia era un poco diferente, porque teníamos claves de URL duplicadas y problemas importantes con los nombres de productos de las importaciones de Excel después de actualizar a 1.13 desde 1.11, así que escribí este script rápido para restablecer la catalog_product_entity_url_key
tabla y las claves de URL y las rutas de URL en la catalog_product_entity_varchar
tabla usando el producto nombres Adjunto el código a continuación, pero si lo usa, úselo bajo su propio riesgo.
<?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.']';
El código se puede modificar para usar el método de clave de formato Magentos aquí: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion Desafortunadamente, encontré el wiki después de actualizar todas las claves, así que no me molesté en volver a actualizar todo de nuevo.
Espero que ayude :)!
core_url_rewrite
y funcionó.