我正在尝试转换此网址
http://www.example.com/test/products-list.php?category=cars&subcategory=coupe&color=blue
到
http://www.example.com/test/products/cars/coupe/blue
这些是我正在使用的规则:
RewriteRule products/(.*)/(.*)/(.*)/ /test/products-list.php?category=$1&subcategory=$2&color=$3
RewriteRule products/(.*)/(.*)/(.*) /test/products-list.php?category=$1&subcategory=$2&color=$3
适用于某些网址:
http://www.example.com/test/products/cars ----> not working
http://www.example.com/test/products/cars/ ----> not working
http://www.example.com/test/products/cars/coupe ----> not working
http://www.example.com/test/products/cars/coupe/ ----> working
http://www.example.com/test/products/cars/coupe/blue ----> working
http://www.example.com/test/products/cars/coupe/blue/ ----> working
如何修复不起作用的3个案例?还有,它不起作用的原因是什么?
答案 0 :(得分:1)
我认为你的表达是在产品这个词之后寻找3或4'/'。
你的三个捕获(.*)
正在使用“0或更多”重复运算符'*',但你的三个是必需的。
我相信http://www.example.com/test/products/cars//
会测试为有效。
现在......如何解决?
我认为每个搜索案例都需要三次不同的重写。
您将在下面看到我使用'+''重复运算符'强制类别,子类别或<的捕获中至少有1个字符EM>颜色。
'/?'在表达式的末尾表示'/'是可选的。这会将上述两条规则合并为一条。
RewriteRule products/(.+)/? /test/products-list.php?category=$1
RewriteRule products/(.+)/(.+)/? /test/products-list.php?category=$1&subcategory=$2
RewriteRule products/(.+)/(.+)/(.+)/? /test/products-list.php?category=$1&subcategory=$2&color=$3
请注意读者,我多年没有使用Apache mod_Rewrite,但我认为它只是一个正则表达式匹配问题。