2013-10-04 68 views
1

我已将商店从Xcart迁移到Magento。在此过程中,产品,类别和静态页面URL已更改。 (分别为18,000:530:50)Magento 1.7.02自定义URL重新编制后重写“目录URL重写”

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

我正在从事产品和类别进口。我曾在StackOverflow和MagentoCommerce上看到过有关这方面的几个主题,但是唯一的解决方法是提供它来修改Magento核心文件并从url中移除嵌套的类别名称。这不适用于我的静态页面URL重写,并且不能接受产品和类别url重写。

任何帮助非常感谢。

PS。这是我在计算器上的第一个问题;)

<?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

穷举搜索之后,我发现了Magento的URL重写系统是一般不可靠的。有时,url会重写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"; 



?> 

希望这有助于有人出来!