htaccess重定向 - 使用子文件夹作为参数

时间:2012-09-21 15:58:52

标签: regex .htaccess redirect

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

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

我的目标是拥有

products/someValue/someID

映射到

product.php?param1=someValue&param2=someID

这是我到目前为止的地方。这大部分都有效,但有些事情并不是我想要的。我需要它基本上通过正斜杠将products/之后的所有内容分开,并将每个作为参数使用,无论多少或几个。另外,尾部斜杠是可选的 - 如果不包括,我的规则会抛出404。谁能指出我正确的方向?

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

2 个答案:

答案 0 :(得分:1)

你目前的正则表达式是贪婪的。量词默认是贪婪的。添加?会使它们不合适。或者您可以更改正则表达式以匹配除/之外的任何内容。其中任何一个都应该有效:

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

Read up on greediness in regexes to understand this better.

答案 1 :(得分:1)

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

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

或:

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