重新索引“目录URL重写”后删除Magento 1.7.02 CE自定义URL重写

时间:2013-10-04 19:21:37

标签: magento url-rewriting

我将商店从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&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();

    }
}
?>

1 个答案:

答案 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";



?>

希望这有助于那里的人!