使用php将旧产品链接重定向到新产品链接

时间:2013-09-12 14:06:26

标签: php apache .htaccess redirect virtuemart

美好的一天,大家!

客户将电子商店从一个CMS切换到另一个CMS。他们希望将所有旧产品和类别链接重定向到新链接。以下是旧链接和新链接的示例:

旧链接结构:

类别:http://www.myshop.com/index.php?categoryID=55

产品:http://www.myshop.com/index.php?productID=777

新链接结构:

类别:http://www.myshop.com/categoryName/

            `http://www.myshop.com/categoryName/subcategoryName/`

产品:http://www.myshop.com/categoryName/productName/

          `http://www.myshop.com/categoryName/subcategoryName/productName/`

总共约2000个链接。

据我所知,目标CMS将是Virtuemart。网络服务器是apache。支持htaccess和php。客户表示如果可能,他们不想使用htaccess。他们更喜欢使用php脚本重定向所有链接。

我之前从未做过如此复杂的网址重定向,我很感激大家的帮助!我想我需要为此创建一些php文件。但是在它中使用什么算法以及在哪里放置它我不知道。提前谢谢!

2 个答案:

答案 0 :(得分:3)

.htaccessmod_rewrite将不会有太大帮助,因为您需要PHP代码来查询您的数据库并将ID转换为名称。

伪代码:置于index.php之上

1:检查$_GET['categoryID']是否为空 2:如果不为空,则使用提供的categoryID查询您的数据库并获取categoryName
3:将此代码置于index.php

之上
if (!empty($_GET['categoryID']) {
    // place sanitization etc if needed
    $categoryName = getFromDB($_GET['categoryID']);
    // handle no categoryName found here
    header('Location: /' . $categoryName, TRUE, 301);
    exit;
}

PS:同样对productID进行处理。

答案 1 :(得分:1)

鉴于你的情况,我会建议这样的事情。请注意我们正在使用的永久移动标头。这是你应该使用的,因为它是最友好的搜索引擎。

与名称一样,PHP重定向告诉浏览器(或搜索引擎机器人)该页面已永久移动到新位置。

<?php

$parent = '';
$child = '';


if (!empty($_GET['categoryID'])){
    // Go fetch the category name and
    // potential subcategory name
    $parent = 'fetchedCategoryName';
    $child = 'fetchedSubCatNameIftherewasone';
}elseif (!empty($_GET['productID'])){
    // Go fetch the category name and
    // potential subcategory name
    $parent = 'fetchedProductName';
    $child = 'fetchedSubProdNameIftherewasone';
}

$location = '/';
$location .= "$parent/";

if (!empty($child)){
    $location .= "$child/";
}

// a more succinct view of this might be:
// header('Location: ' . $location, TRUE, 301);

// here is the verbose example
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: $location"); 
exit();