1

今天是个好日子!

客户将电子商店从一个 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 脚本来重定向所有链接。

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

4

2 回答 2

3

.htaccess或者mod_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

于 2013-09-12T14:18:26.090 回答
1

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

顾名思义,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();
于 2013-09-12T14:24:49.217 回答