Php 301重定向旧osCommerce链接的最佳方法
我们正在从旧的osCommerce安装迁移到WordPress。90%的流量是通过有机结果发送的,有超过4000个索引产品页面,重定向到新站点是必不可少的 旧站点的URL结构:Php 301重定向旧osCommerce链接的最佳方法,php,apache,wordpress,.htaccess,oscommerce,Php,Apache,Wordpress,.htaccess,Oscommerce,我们正在从旧的osCommerce安装迁移到WordPress。90%的流量是通过有机结果发送的,有超过4000个索引产品页面,重定向到新站点是必不可少的 旧站点的URL结构: /product_info.php?cPath=1&products_id=4 其中,cPath=>osCommerce类别和products\u id就是这样。这两者都包含在osCommerce数据库中 新网站: /categoryname/product-title 既然我们正在从IDs迁移到永久链接,那
/product_info.php?cPath=1&products_id=4
其中,cPath
=>osCommerce类别和products\u id
就是这样。这两者都包含在osCommerce数据库中
新网站:
/categoryname/product-title
既然我们正在从IDs迁移到永久链接,那么动态地将所有这些URL 301到正确位置的最佳方法是什么??我在想可能是一个PHP脚本来生成.htaccess文件,有人有这方面的经验吗?我可以将类别ID映射到正确的WordPress类别slug,并将旧站点与旧产品URL和产品标题相匹配。这是最好的方法吗?把我的头撞在墙上
我已经看过了,但它不适用,因为我正在尝试动态重定向所有旧产品,或者至少动态生成重定向(如我所说,大约5000个产品)
编辑:我的想法: 一,。创建.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]
二,。它将所有匹配的请求发送到定制的PHP301重定向脚本
三,。脚本包含一个已映射到正确数据库值(无数据库调用)的category\u names=>id对数组,以及一个单独的products\u names=>product\u id数组
四,。匹配类别和产品信息后,脚本会将您推到正确的位置:
$yourNewLocation = $cat . '/' . $product . '/';
function return_301($yourNewLocation){
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '. $yourNewLocation);
}
可能的瓶颈:5000+的关联数组?这是mysql连接获取所需信息的主要瓶颈吗?“我在考虑使用PHP脚本生成.htaccess文件”
如果要这样做,我建议将重定向放在httpd包含中,而不是.htaccess中,使用.htaccess时会影响性能-在这方面,包含可能会更好
另外,如果要使用php将ID映射到永久链接:
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.$yourNewLocation);
我不能100%确定你的计划是否是“最好的办法”,但它听起来确实合理。。(当然,使用php+动态重定向数据库调用比wither.htaccess或include方法更具吸引力!)“我在考虑使用php脚本生成.htaccess文件”
如果要这样做,我建议将重定向放在httpd包含中,而不是.htaccess中,使用.htaccess时会影响性能-在这方面,包含可能会更好
另外,如果要使用php将ID映射到永久链接:
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.$yourNewLocation);
我不能100%确定你的计划是否是“最好的办法”,但它听起来确实合理。。(当然,使用php+动态重定向数据库调用比使用wither.htaccess或include方法更容易成功!)我会用php来实现。如果通过Apache的mod_rewrite完成,则每个重定向规则需要2行代码(RewriteRule
用于实际重定向,而RewriteCond
用于匹配特定的查询字符串)。我不知道使用PHP数组是否真的是个好主意(这将是一个相当大的数组..而且PHP数组在内存消耗方面效率很低)。速度应该可以(或者至少类似于MySQL,但需要测试,因为每个服务器都不同)但是内存消耗肯定会很高。如果你在共享主机上同时有很多重定向,这可能会成为一个瓶颈。我会去MySQL存储重定向对。1)不需要第一次重写第二次-模式可以很容易地移动到重写规则本身(这也会减少匹配的数量——这不是一个很大的好处,但是如果可以很容易避免的话,为什么还要有这个额外的功能呢。)2)我不知道所有的细节。。但我认为根本不需要重写规则——只要使用product_info.php
而不是将redirect.php
放在第一位(将所有重定向代码放在那里)。我会用php来做。如果通过Apache的mod_rewrite完成,则每个重定向规则需要2行代码(RewriteRule
用于实际重定向,而RewriteCond
用于匹配特定的查询字符串)。我不知道使用PHP数组是否真的是个好主意(这将是一个相当大的数组..而且PHP数组在内存消耗方面效率很低)。速度应该可以(或者至少类似于MySQL,但需要测试,因为每个服务器都不同)但是内存消耗肯定会很高。如果你在共享主机上同时有很多重定向,这可能会成为一个瓶颈。我会去MySQL存储重定向对。1)不需要第一次重写第二次-模式可以很容易地移动到重写规则本身(这也会减少匹配的数量——这不是一个很大的好处,但是如果可以很容易避免的话,为什么还要有这个额外的功能呢。)2)我不知道所有的细节。。但我认为根本不需要重写规则-只需使用product_info.php
而不是将redirect.php
放在第一位(将所有重定向代码放在那里)。谢谢!这两者的结合如何?.htaccess可以将/product\u info.php?cPath=1&product\u id=4
发送到/my301generator.php?cPath=1&product\u id=4
,然后使用预映射数组(已与数据库匹配,'cPath 1'->'CategoryName'
)输出正确的$yournowlocation
。这意味着映射到DB后,我不需要进行任何DB调用,一切都很好,不是吗?现在查看一下重写cond的规则,我尝试了一下我在原始帖子中的意图,我认为一个高效编写的查询将比解析一个“映射”文件更高效。谢谢!这两者的结合如何?.htaccess可以将/product\u info.php?cPath=1和products\u id=4
发送到/my301generator.php?cPath=1和products\u id=4