美好的一天,大家!
客户将电子商店从一个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文件。但是在它中使用什么算法以及在哪里放置它我不知道。提前谢谢!
答案 0 :(得分: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
进行处理。
答案 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();