1

我试图弄清楚如何从以下内容重写 URL:example.com/collection.php?collection=1

进入:example.com/collection-name.php

我最近重新设计了一个电子商务网站,需要将旧 URL 重定向到新 URL。我已经看到了大量关于如何在重写的 URL 中使用 collection=1 的值的说明,但没有看到如何使用文本而不是值的说明。只有 5 个集合值需要重定向,但此外还有旧 URL,其中包含多个参数,也需要作为文本重写/重定向。我认为这是有道理的。

因此,我认为如果我可以设置初始重定向,我可以将它们全部解决。

其他/更复杂的旧 URL 如下所示:example.com/collection.php?collection=1&product=2&item=3

然后需要将其重定向到:example.com/collection-name/sub-collection-name/product-name.php

不知道该怎么做。我不想在 .htaccess 文件中逐行编写,但我不知道如何完成此操作。

在此先感谢,我感谢安迪和在这件事上的所有帮助!

EDIT------------------------------------ 这是我根据提供给的信息的新重写条件和规则我。这将是包含所有查询参数的 URL 使用 3 个单独的 RewriteMaps 的规则。

RewriteCond %{QUERY_STRING} collection=([^&]+)&product=([^&]+)&item=([^&]+)
RewriteRule collection.php shop/${categorymap:%1}/${rangemap:%2}/${productmap:%3}\.php [R=301,L]

请让我知道是否有任何问题或我错过了什么。不确定我是否需要为每个查询参数使用 $1、$2、$3。我仍然是一个重写的 NOOB。谢谢!

编辑 - - - - - - - - - - - - - - - - - - - - - - - - - -----

在我的 .htaccess 文件中使用以下代码:

RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php shop/${categorymap:%1}\.php [R=301,L]

我的网址以“example.com/collection.php?collection=1”开头

正在重写为:example.com/shop/.php?collection=1

我对此有点迷茫。会不会是我的重定向地图没有被读取?或者是别的什么?谢谢您的帮助。

4

1 回答 1

1

您想研究使用RewriteMap。您可以为收藏、子收藏和产品指定所需的地图,然后查找每个编号的文本。

所以你会在你的虚拟主机配置中定义一个 RewriteMap 类似的东西

RewriteMap categmap txt:/path/to/category/map.txt

然后你的重写规则看起来像

RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php ${categmap:%1} [L,R]

为您更复杂的情况添加更多RewriteCond的 s 并从中制定单独的规则。首先在文件中放置更具体的规则,然后是更一般的规则。

于 2012-05-29T19:05:44.000 回答