Kami berada dalam situasi yang sama dengan Anda James. Setelah banyak menggali, inilah yang saya temukan:
The core_url_rewritetabel sekarang tidak berlaku lagi bukan Magento EE 1,13 sekarang menyimpan penulisan ulang di enterprise_url_rewrite.
Tabel:
enterprise_*_category_rewritegunakan catalog_*_entity_url_keytabel untuk membangun kembali dua tabel penulisan ulang saat Anda menjalankanphp indexer.php --reindex catalog_url_*
Ketika Anda menambahkan 'URL Redirect' di admin Catalog-> URL Redirect untuk URL khusus itu akan ditambahkan ke enterprise_url_rewrite_redirecttabel dan bendera untuk Magento bahwa indeks sekarang sudah usang dimasukkan ke dalam enterprise_url_rewrite_redirect_cltabel yang ketika menjalankan php indexer.php --reindex url_redirectmembangun kembali enterprise_url_rewrite_redirect_rewritetabel.
Catatan cepat, setiap tabel yang diakhiri dengan _cl aman untuk dipotong, 'CL' adalah singkatan dari Change Log dan digunakan oleh Magento untuk memeriksa apakah pengindeksan ulang diperlukan.
Sejauh tabel URL Key pergi, saya masih tidak mengerti mengapa ada dua entri URL Key satu catalog_*_entity_url_keydan satu di catalog_*_entity_varchar(atribut id 90), tapi saya berasumsi inilah yang terjadi:
Ketika Anda membuat produk / kategori baru Magento menggunakan nama untuk menghasilkan url_key yang ditempatkan di catalog_*_entity_url_keyDAN di catalog_*_entity_varchar, tetapi tabel utama yang digunakan oleh Magento adalah catalog_*_entity_url_keykarena jika Anda memotongnya dan menjalankan tabel php indexer.php --reindex catalog_url_*Anda enterprise_*_category_rewriteakan kosong dan produk / kategori dalam frontend akan menampilkan url jelek yaitu http://example.com/catalog/product/view/id/123/etc/etc(tidak ramah SOE) Saya percaya kedua tabel terkait dan digunakan untuk membangun enterprise_url_rewritetabel karena tabel ini menyimpan 'request_path' kemungkinan besar url_key di dalam catalog_*_entity_varchartabel dan 'identifier' yang merupakan primary Kunci URL dari catalog_*_entity_url_keytabel. Saya bisa sepenuhnya salah tentang tabel url_key dan varchar, jadi saya hanya berpikir keras.
Pokoknya untuk berhasil memotong dan membangun kembali semua tabel penulisan ulang Anda dapat menjalankan:
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;
lalu jalankan:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
Jika Anda juga memotong enterprise_url_rewrite_redirectmaka Anda akan kehilangan semua pengalihan kustom yang Anda lihat di panel admin Anda, mungkin ini adalah tujuan Anda karena Anda ditinggalkan dengan satu ton URL yang tidak berguna. Selama Anda TIDAK memotong tabel '* _entity_url_key' Anda akan baik-baik saja.
Kisah kami sedikit berbeda, karena kami memiliki duplikat Kunci URL dan masalah besar dengan nama produk dari impor excel setelah memutakhirkan menjadi 1,13 dari 1,11 jadi saya menulis skrip cepat ini untuk mengatur ulang catalog_product_entity_url_keytabel dan kunci URL serta jalur URL di catalog_product_entity_varchartabel menggunakan produk nama. Saya melampirkan kode di bawah ini, tetapi jika Anda menggunakannya, gunakan dengan risiko Anda sendiri.
<?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.']';
Kode dapat di-tweak untuk menggunakan metode Magentos formatKey di sini: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion sayangnya saya menemukan wiki setelah saya memperbarui semua kunci sehingga saya tidak repot-repot melakukan reupdating semuanya lagi.
Semoga itu bisa membantu :)!
core_url_rewritedan berhasil.