.htaccess htaccess可将param=NUMBER重写为/text

.htaccess htaccess可将param=NUMBER重写为/text,.htaccess,redirect,url-rewriting,rewritemap,.htaccess,Redirect,Url Rewriting,Rewritemap,我正试图找出如何从以下内容重写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

进入: 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文件中逐行写入,但我不知道如何实现这一点

提前谢谢,我感谢安迪和所有在这件事上的帮助

编辑------------------------------------ 这是我的新重写条件和规则,基于提供给我的信息。这将是包含所有查询参数的URL使用3个单独的重写映射的规则

RewriteCond %{QUERY_STRING} collection=([^&]+)&product=([^&]+)&item=([^&]+)
RewriteRule collection.php shop/${categorymap:%1}/${rangemap:%2}/${productmap:%3}\.php [R=301,L]
如果有什么不对劲或我错过了什么,请告诉我。不是;我不确定是否需要为每个查询参数使用$1、$2、$3。我还是个重写的笨蛋。谢谢

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

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

RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php shop/${categorymap:%1}\.php [R=301,L]
我的URL以“example.com/collection.php?collection=1”开头

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


我对此有点不知所措。可能是我的重定向地图没有被读取?还是其他原因?谢谢您的帮助。

您想使用查找。您可以指定收藏、子收藏和产品的地图,然后查找每个数字的文本

因此,您可以在virtualhost配置中定义一个重写映射,如下所示

RewriteMap categmap txt:/path/to/category/map.txt
RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php ${categmap:%1} [L,R]
然后你的重写规则看起来像

RewriteMap categmap txt:/path/to/category/map.txt
RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php ${categmap:%1} [L,R]

为更复杂的案例添加更多的
RewriteCond
s,并从中制定单独的规则。首先将更具体的规则放在文件中,然后再将更一般的规则放在文件中。

您想使用a进行研究。您可以指定收藏、子收藏和产品的地图,然后查找每个数字的文本

因此,您可以在virtualhost配置中定义一个重写映射,如下所示

RewriteMap categmap txt:/path/to/category/map.txt
RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php ${categmap:%1} [L,R]
然后你的重写规则看起来像

RewriteMap categmap txt:/path/to/category/map.txt
RewriteCond %{QUERY_STRING} collection=([^&]+)
RewriteRule collection.php ${categmap:%1} [L,R]

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

太棒了!感谢您的帮助。RewriteMap看起来非常简单。只需查看VirtualHost,看看它是如何构造的,因为我不需要它再次感谢!快速提问,因为我的旧参数可以有相同的值(collection=1&product=1&item=1)那么,我是否需要为这些参数中的每一个设置多个RewriteMap文件?我想是的,但我不确定。谢谢。我建议使用三个映射文件,每个变量一个,特别是因为这些值在不同的上下文中可能重叠并意味着不同的内容。Ansari,我在我的原始帖子中添加了我的新重写代码作为编辑。我想我得到了正确的结果。但是验证/确认将不胜感激!感谢您的帮助!只需修改您的代码以修复一些语法错误。但没有比实际尝试更好的测试:)太棒了!感谢您的帮助。重写映射看起来非常简单。只需查看VirtualHost,看看它是如何构造的,因为我不需要再次感谢!快速提问,因为我的旧参数可以有相同的值(collection=1&product=1&item=1)那么,我是否需要为这些参数中的每一个设置多个RewriteMap文件?我想是的,但我不确定。谢谢。我建议使用三个映射文件,每个变量一个,特别是因为这些值在不同的上下文中可能重叠并意味着不同的内容。Ansari,我在我的原始帖子中添加了我的新重写代码作为编辑。我想我得到了正确的结果。但是验证/确认将不胜感激!感谢您的帮助!只需修改代码以修复一些语法错误。但没有比实际试用更好的测试了:)