【问题标题】:Oscommerce to OpenCart RedirectsOscommerce 到 OpenCart 重定向
【发布时间】:2018-11-05 09:35:44
【问题描述】:

Oscommerce SEO 友好 URL 的工作方式是,它们是从产品或类别标题生成的,然后是产品的 p 和类别的 c,然后是产品或类别 ID。对于类别,还使用每个父目录 ID。 例如:

https://example.com/jeep-pinion-gears-c-284_845.html

多年来,产品和类别被编辑和移动,因此更改了 URL。但是,所有旧 URL 仍然得到解决,因为页面是严格根据 URL 的最后一部分提供的。它查找 c 或 p 以及 ID。 SEO仍然能够维持。 例如:

https://example.com/jeep-pinion-gears-c-284_845.html
https://example.com/jeep-pinion-gears-and-accessories-c-284_845.html
https://example.com/jeep-pinion-gears-c-284_1234_845.html
https://example.com/ring-pinion-gears-c-845.html

都会加载相同的内容。

我最近改用 OpenCart,我在其中使用 OsCommerce 商店中每个产品和类别的最新 URL。但是,所有旧的 Oscommerce URL 都不起作用。

我最初正在编写一些正则表达式重定向来匹配 ID,但我遇到了重定向循环问题。

有人对不同的方法有任何想法吗?

【问题讨论】:

  • 我想我可以为每个当前使用的 URL 使用重写条件,以在任何条件匹配时跳过重写规则。
  • 我离开了它,这就是我遇到这个问题的原因
  • 845是这个产品的ID?
  • 是的,但在这种情况下它是一个类别
  • 如果没有允许从 OsCommerce slug 中推断出 OpenCart URL 的转换规则,那么您几乎迷路了。

标签: apache .htaccess http-status-code-404 opencart oscommerce


【解决方案1】:

如果有办法从您的 OsCommerce SEO URL 派生新的 OpenCart URL

RewriteCond %{REQUEST_URI} !^/.*?-[cp]-\d+\.html$
RewriteCond %{REQUEST_URI} ^/(.*?)-([cp])-[\d_]*?(\d+)\.html$  [NC]
RewriteRule (.*) https://new.example.com/%2-%3.php [R=301,L]

这里的重要部分是阻止循环重定向的停止不规则。

将它放在其他重写之下,删除尾部斜杠或 www 子域,或 httphttps 重写。

如果三个不是两个 URL 之间的“简单关系”,那么你就不走运了,必须为每个 URL 编写一个重定向。您应该能够使用存储在数据库中的 SEO URL 生成规则。

Redirect 301 /old-page.html http://www.example.com/new-page.html

也许 PHP 重定向也有帮助?

header("Location: http://www.example.com/new-page.html", true, 301);
exit();

【讨论】:

  • 这个问题是我们不知道它使用的文本(第 1 组)来匹配 opencart URL
  • 我能想到的唯一解决方案是根据 c/p 字母和 ID 将其与 opencart URL 匹配,并为每个产品和类别构建一个重写规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 2017-09-23
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多