Kami berada dalam situasi yang sama dengan Anda James. Setelah banyak menggali, inilah yang saya temukan:
The core_url_rewrite
tabel sekarang tidak berlaku lagi bukan Magento EE 1,13 sekarang menyimpan penulisan ulang di enterprise_url_rewrite
.
Tabel:
enterprise_*_category_rewrite
gunakan catalog_*_entity_url_key
tabel 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_redirect
tabel dan bendera untuk Magento bahwa indeks sekarang sudah usang dimasukkan ke dalam enterprise_url_rewrite_redirect_cl
tabel yang ketika menjalankan php indexer.php --reindex url_redirect
membangun kembali enterprise_url_rewrite_redirect_rewrite
tabel.
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_key
dan 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_key
DAN di catalog_*_entity_varchar
, tetapi tabel utama yang digunakan oleh Magento adalah catalog_*_entity_url_key
karena jika Anda memotongnya dan menjalankan tabel php indexer.php --reindex catalog_url_*
Anda enterprise_*_category_rewrite
akan 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_rewrite
tabel karena tabel ini menyimpan 'request_path' kemungkinan besar url_key di dalam catalog_*_entity_varchar
tabel dan 'identifier' yang merupakan primary Kunci URL dari catalog_*_entity_url_key
tabel. 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_redirect
maka 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_key
tabel dan kunci URL serta jalur URL di catalog_product_entity_varchar
tabel 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_rewrite
dan berhasil.