1

我将我们的商店从 Xcart 迁移到 Magento。在此过程中,产品、类别和静态页面 url 发生了变化。(分别为 18,000:530:50)

使用以下代码,我为静态页面创建了新的 urlrewrites。当我重新索引目录 URL 重写时,我的自定义重写消失了。这是怎么回事?!?!?!?!

接下来我将致力于产品和类别的导入。我在 StackOverflow 和 MagentoCommerce 上看到了几个关于此的线程,但唯一的解决方法是修改 Magento 核心文件并从 url 中删除嵌套的类别名称。这不适用于我的静态页面 url 重写,也不适用于产品和类别 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&amp;Brand=Lascivious Test&amp;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();

    }
}
?>
4

1 回答 1

1

经过详尽的搜索,我发现 magento 的 url 重写系统总体上是不可靠的。有时,url rewrite reindexing 会停止,我必须手动截断“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";



?>

希望这可以帮助那里的人!

于 2013-12-02T22:51:57.797 回答