我在Apache下使用mod_rewrite
遇到了一些奇怪的行为。以下是当前RewriteRules
的外观:
RewriteRule ^(.*)/collections/(.*)/(.*)/?$ bootstrap.php?controller=category&user=$1&collection=$2&category=$3 [L]
RewriteRule ^(.*)/collections/(.*)/?$ bootstrap.php?controller=collection&user=$1&collection=$2 [L]
我对上述规则的期望是,访问domain.com/BenM/collections/0/1/
之类的网址会将我带到category
控制器,而domain.com/BenM/collections/0/
会将我带到collection
控制器
目前,两个网址结构都重写为bootstrap.php?controller=category...
。
我的理解是,如果指定了[L]
标志,那么Apache就不会再进行重写了。
这里有没有人指出正确的方向,因为我无法击败这个......重写应该是什么样才能实现我上面解释过的功能?
答案 0 :(得分:1)
你正在处理与贪婪相关的问题。此外,你可能想要至少一个长度,你几乎肯定不想在你的参数中使用斜杠。
潜在的解决方案:
^([^/]+)/collections/([^/]+)/([^/]+)/?$
^([^/]+)/collections/([^/]+)/?$