我们正在从旧的osCommerce安装迁移到WordPress。 90%的流量来自有机结果,并有4000多个索引产品页面,重定向到新网站是必不可少的。301重定向旧的osCommerce链接的最佳方式
旧网站的网址结构:
/product_info.php?cPath=1&products_id=4
其中cPath
=>自从类别和就是这样。这两种都包含在DB自从
新网站:因为我们是从标识移动到永久链接
/categoryname/product-title
什么是最好的方式来动态301所有这些URL到正确的位置?我想可能是一个PHP脚本来生成.htaccess文件,有没有人有经验呢?我可以将类别ID映射到正确的WordPress类别slug,并刮掉旧网站以将旧产品网址与产品标题进行匹配。这是最好的方式/甚至可能吗?在这里把我的头撞在墙上。
我看了这一点,但它并不适用,因为我想要动态地重定向所有的旧产品,或者至少动态生成的重定向(就像我说的,约5000产品) Rewrite htaccess old oscommerce links
编辑:我的想法:
1.创建.htaccess文件。
RewriteCond %{REQUEST_URI} ^/product_info\.php$
RewriteCond %{QUERY_STRING} ^cPath=([0-9]+)&products_id=([0-9]+)
RewriteRule ^(.*)$ http://www.domain.com/redirect.php?cat=%1&product=%2? [R=301,L]
2.将所有匹配的请求到一个自定义的PHP 301重定向脚本
3.脚本包含的category_names => id pairs
已经映射到正确的数据库值(没有数据库调用)的阵列,和一个单独的阵列的products_names => product_ids
4.匹配的类别和产品信息后,该脚本推你到正确的地方:
$yourNewLocation = $cat . '/' . $product . '/';
function return_301($yourNewLocation){
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '. $yourNewLocation);
}
可能的瓶颈:5000+的关联数组?是一个主要的瓶颈vs mysql加入获取所需的信息?
我会在** PHP **中执行此操作。如果通过Apache的mod_rewrite完成,每个重定向规则将需要2行('RewriteRule'用于实际重定向,'RewriteCond'用于匹配特定的查询字符串)。 – LazyOne
我不知道是否真的是好主意,使用PHP数组(这将是相当大的阵列..和PHP阵列是非常低效的内存消耗)。速度应该没问题(或者至少类似于MySQL,但需要测试,因为每个服务器都不相同),但内存消耗肯定会很高..如果您在共享主机上并且有大量重定向,则这可能会成为瓶颈时间。我会去MySQL存储重定向对。 – LazyOne
1)不需要第一个RewriteCond - 该模式可以很容易地移入RewriteRule本身(这也会减少匹配的数量 - 不是一个大的收益,但为什么有这额外的,如果它可以**轻松**避免)。 2)我不知道所有的细节......但我认为不需要重写规则AT ALL - 只需使用'product_info.php'而不是'redirect.php'(首先将所有重定向代码放在那里)。 – LazyOne