Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 301重定向旧osCommerce链接的最佳方法_Php_Apache_Wordpress_.htaccess_Oscommerce - Fatal编程技术网

Php 301重定向旧osCommerce链接的最佳方法

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迁移到永久链接,那

我们正在从旧的osCommerce安装迁移到WordPress。90%的流量是通过有机结果发送的,有超过4000个索引产品页面,重定向到新站点是必不可少的

旧站点的URL结构:

/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