如何使用正则表达式多次匹配一个组



不好意思,我不知道怎么恰当地表达。我有一个URL,如/color -white/size-large/,我需要在htaccess中重写它。字符串应该看起来像& color =white&size=large。

我不想多次重写color, size, color和size。

我已经提出了(colour|size)-(.*?)/对字符串color -white/size-large/替代$1=$2&返回color =white&size=large&,但它打破了,当有一个/在开始,我不希望最后的字符串有一个末尾&

编辑:/*(colour|size)-(.*?)/&$1=$2工作,但它打破了一旦有其他文本之前,我猜,因为与全局选项它试图匹配之前的文本每次它寻找颜色或大小。

为不同数量的参数添加多个重写规则是很常见的。这可以工作,包括它之前的内容("dresses")最多三个参数。添加第4个参数只是第4行。所需规则的数量与参数的数量呈线性增长,而不是呈指数增长。

RewriteEngine on
RewriteRule /?(.*/)?(colour|size|rarity)-([^/]+)/(colour|size|rarity)-([^/]+)/(colour|size|rarity)-([^/]+)/ $1?$2=$3&$4=$5&$6=$7 [L]
RewriteRule /?(.*/)?(colour|size|rarity)-([^/]+)/(colour|size|rarity)-([^/]+)/ $1?$2=$3&$4=$5 [L]
RewriteRule /?(.*/)?(colour|size|rarity)-([^/]+)/ $1?$2=$3 [L]
另一种方法是将其全部作为单个参数传递,并在处理程序中对其进行解析。用PHP、Java、Perl或任何后端语言解析任意参数要简洁得多。这段代码将把任意数量的选项放入"选项"中。后端要解析的参数:
RewriteEngine on
RewriteRule /?(.*/)?(colour|size|rarity-[^/]+/)+ $1?options=$2 [L]

你还应该退后一步,问问自己这是否是你真正想要或需要做的事情。在URL路径中插入任意参数是不再是SEO友好的而不是将它们放在查询字符串中。你最好的URL实际上可能是/dresses?size=large&colour=blue,你可以在我的回答中阅读我的完整推理,以seo友好的方式在URL参数中传递多个值

相关内容

最新更新