我将商店从Xcart迁移到Magento。在此过程中,产品,类别和静态页面网址已更改。 (分别为18,000:530:50)
使用以下代码,我为静态页面创建新的urlrewrites。当我重新索引目录URL重写时,我的自定义重写消失。什么交易?!?!?!?!
接下来我正致力于产品和类别的进口。我已经在StackOverflow和MagentoCommerce上看到了几个关于此的线程,但唯一的解决方法是它修改了Magento核心文件并从url中删除了嵌套的类别名称。这不适用于我的静态页面网址重写,不适用于产品和类别网址重写。
任何帮助都非常受欢迎。
PS。这是我在StackOverflow上的第一个问题;)
<?php
if ($import_custom) {
echo "\n\n\n*********************************\n\n\n";
$sql = 'select * from url_rewrite_xcart_to_magento_custom';
$all_url_pairs = mysqli_submit_get($db_param_petdata, $sql, "0");
foreach ($all_url_pairs as $url_pair) {
// echo $url_pair['old_url'] ."\n";
// echo $url_pair['new_url'] ."\n";
var_export($url_pair);
echo "\n\n";
$new_urlrewrite_object = Mage::getModel('core/url_rewrite');
$new_urlrewrite_object
->setIsSystem(0)
->setStoreId($store_id)
->setOptions('RP')
->setIdPath($url_pair['old_url'])
->setTargetPath( $url_pair['new_url'])
->setRequestPath($url_pair['old_url'])
->setDescription('imported aeroflow staff url forwarding list')
->save()
;
$new_urlrewrite_object
->clearInstance
;
// var_export($new_urlrewrite_object);
// echo "\n\n";
$existing_urlrewrite_object = Mage::getModel('core/url_rewrite')
->setStoreId($store_id)
->loadByRequestPath($url_pair['old_url'])
;
var_export($existing_urlrewrite_object);
echo "\n\n";
$existing_urlrewrite_object
->clearInstance
;
echo "\n\n\n*********************************\n\n\n";
// Mage::getModel('core/url_rewrite')
// ->setIsSystem(0)
// ->setOptions('RP')
// ->setIdPath('Imported-Old-Website-URL-test1')
// ->setTargetPath('alicia-suspender-skirt-32360')
// ->setRequestPath('SHOPONLINE.aspx?Product=Alicia Skirt&Brand=Lascivious Test&PID=1975')
// ->save()
// ;
// Mage::getModel('core/url_rewrite')
// ->setIsSystem(0)
// ->setStoreId($storeId)
// ->setOptions('RP')
// ->setIdPath('index.php?cat=c' . $categoryId . '_' . $this->strip($data['name']) . '.html')
// ->setTargetPath($categoryModel->getUrlPath() . '.html')
// ->setRequestPath('index.php?cat=c' . $categoryId . '_' . $this->strip($data['name']) . '.html')
// ->save();
}
}
?>
答案 0 :(得分:1)
经过详尽的搜索,我发现magento的url重写系统一般不可靠。有时,url重写重建索引,我必须手动截断“core_url_rewrite”表。
另外,magento url默认都是小写,mysql不区分大小写,但是apache区分大小写。这些条件相互影响。
因此,我编写了一个php脚本,用于从mysql表中提取url重写数据,并创建一个apache重写数据库文件。
这是我的特定于站点的apache配置:
#REWRITES FOR TRANSITION FROM XCART TO MAGENTO WITHOUT LOSING SEO PAGE RANK
RewriteMap xcart_magento dbm:/etc/apache2/sites-available/xcart_magento_rewrites.dbm
RewriteCond ${xcart_magento:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^/(.*) /${xcart_magento:$1} [R=301]
这是我的剧本:
<?php
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// GETTING STARTED
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
require_once '/usr/local/bin/functions.php';
require_once("/home/magento/app/Mage.php");
Mage::app();
$username="xxx";
$password="xxx";
$database_petdata="xxx";
$database_mag="xxx";
$server="localhost";
$db_param_general["server"] = $server;
$db_param_general["username"] = $username;
$db_param_general["password"] = $password;
$db_param_general["database"] = '';
$db_param_petdata["server"] = $server;
$db_param_petdata["username"] = $username;
$db_param_petdata["password"] = $password;
$db_param_petdata["database"] = $database_petdata;
$db_param["server"] = $server;
$db_param["username"] = $username;
$db_param["password"] = $password;
$db_param["database"] = $database_mag;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// MAKE APACHE REWRITE DATABASE FILE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$make_txt_file = 1;
if ($make_txt_file) {
$base_dir = "/etc/apache2/sites-available/";
$rewrite_map_file_txt = "xcart_magento_rewrites.txt";
$rewrite_map_file_dbm = "xcart_magento_rewrites.dbm";
unlink ($base_dir . $rewrite_map_file_txt);
unlink ($base_dir . $rewrite_map_file_dbm);
date_default_timezone_set('America/New_York');
$dt = date(DATE_RSS);
$file_header = "##\n";
$file_header .= "## $base_dir$rewrite_map_file_txt - product, category, and custom url rewrite map database file\n";
$file_header .= "##\n";
$file_header .= "## created by Benji Burrell on $dt \n";
$file_header .= "##\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $file_header,FILE_APPEND);
$sql = 'select xcart_url as "old",mag_url as "new" from url_rewrite_xcart_to_magento_categories where xcart_url != mag_url';
$cat_url_sets = mysqli_submit_get($db_param_petdata, $sql, "0");
// echo "-------------- CATEGORY URL SETS\n";
// print_r($cat_url_sets);
foreach ($cat_url_sets as $set) {
$str = $set["old"] . " " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
$str = $set["old"] . "/ " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
}
$sql = 'select xcart_url as "old",mag_url as "new" from url_rewrite_xcart_to_magento_products where xcart_url != mag_url';
$prod_url_sets = mysqli_submit_get($db_param_petdata, $sql, "0");
// echo "-------------- PRODUCT URL SETS\n";
// print_r($prod_url_sets);
foreach ($prod_url_sets as $set) {
$str = $set["old"] . " " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
$str = $set["old"] . "/ " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
}
$sql = 'select old_url as "old",new_url as "new" from url_rewrite_xcart_to_magento_custom where old_url != new_url';
$custom_url_sets = mysqli_submit_get($db_param_petdata, $sql, "0");
// echo "-------------- CUSTOM URL SETS\n";
// print_r($custom_url_sets);
foreach ($custom_url_sets as $set) {
$str = $set["old"] . " " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
$str = $set["old"] . "/ " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
$str = $set["old"] . ".html " . $set["new"] . "\n";
file_put_contents($base_dir . $rewrite_map_file_txt, $str,FILE_APPEND);
}
}
$cmd = "httxt2dbm -i " . $base_dir . $rewrite_map_file_txt . " -o " . $base_dir . $rewrite_map_file_dbm ;
shell_exec($cmd);
$shell_output = shell_exec('/etc/init.d/apache2 restart');
echo "$shell_output";
?>
希望这有助于那里的人!