URL重写php查询字符串

时间:2016-11-03 23:19:53

标签: php apache .htaccess

我有两个网址在做一些查询,我正在努力以我想要的方式重写。

第一

/shop/index.php?category=catslug

我想成为

/shop/category

第二

/shop/index.php?product=slug

/shop/category/product

我目前有这个:

RewriteRule ^shop/([A-Za-z0-9-]+)/?$ shop/index.php?category=$1 [L]
RewriteRule ^shop/[A-Za-z-]+/([A-Za-z0-9-]+)/?$ shop/index.php?product=$1 [NC,L]

问题在于其中一条规则破坏了以商店开头的任何内容,因此shop/cart之类的内容无效。我很困惑。这可能吗?

1 个答案:

答案 0 :(得分:0)

请注意,对于shop/cartcart部分与第一个[A-Za-z0-9-]+的{​​{1}}部分匹配。所以它被重写为RewriteRule

避免这种情况的方法,希望你的固定网址数量相对较少,就是在你的2条规则之前有一个shop/index.php?category=cart

RewriteRule

对于匹配其中一个竖线分隔字符串(例如RewriteRule ^shop/(cart|this|that|other|thing) - [L] RewriteRule ^shop/([A-Za-z0-9-]+)/?$ shop/index.php?category=$1 [L] RewriteRule ^shop/[A-Za-z-]+/([A-Za-z0-9-]+)/?$ shop/index.php?product=$1 [NC,L] )的请求,cart表示不会更改请求,而-表示最后一次(不是{39}} ; t继续下一个规则)。