0

我一直在为(例如)在线商店制定 htaccess 重定向指令。

产品显示在 product.php 上,传入一个 ID 参数。

我的目标是拥有

products/someValue/someID

映射到

product.php?param1=someValue&param2=someID

这就是我目前所处的位置。这主要是有效的,但有几件事不是我想要的。我需要它基本上products/用正斜杠分隔所有内容,并将它们中的每一个用作参数,无论有多少。此外,尾部斜杠是可选的 - 如果不包括,我的规则会抛出 404。谁能指出我正确的方向?

RewriteRule ^products/(.*)/(.*)/.*$ /product.php?param1=$1&param2=$2
4

2 回答 2

1

您当前的正则表达式是贪婪的。量词默认是贪婪的。添加 a?会使它们变得不贪婪。或者您可以更改您的正则表达式以匹配除/以下任何一个都应该工作的任何内容:

RewriteRule ^products/(.*?)/(.*?)(/.*)?$ /product.php?param1=$1&param2=$2
RewriteRule ^products/([^/]*)/([^/]*)(/.*)?$ /product.php?param1=$1&param2=$2

阅读正则表达式中的贪婪以更好地理解这一点。

于 2012-09-21T16:11:49.990 回答
1

尝试将正则表达式更改为非贪婪:

RewriteRule ^products/(.*?)/(.*?)/.*$ /product.php?param1=$1&param2=$2

或者:

RewriteRule ^products/([^/]+)/([^/]+)/.*$ /product.php?param1=$1&param2=$2
于 2012-09-21T16:11:53.563 回答