经过详尽的搜索,我发现 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";
?>
希望这可以帮助那里的人!