重写使多条路径有效的规则

时间:2015-06-26 17:59:42

标签: .htaccess mod-rewrite

我要求使以下路径有效。 根据url的组成,它们被映射为转到不同的java类。

/books/
/books/science/
/books/science/fiction/
/books/science/fiction/kids/

所以,我在配置文件中给出了重写规则:

^/books$
^/books/(.*)$
^/books/(.*)/(.*)$
^/books/(.*)/(.*)/(.*)$

但是我提供类似这样的网址的那一刻

http://localhost/books/science/fiction/kids/12345

而不是被第四次重写规则捕获,它被第二次重写,这不是我想要的。

有人可以告诉我如何实现这个目标吗?提前致谢

^/books$ /webapp/wcs/stores/servlet/ABCController?resultsFor=allCategories [PT,QSA]
^/books/(.*)$ /webapp/wcs/stores/servlet/XYZController?make=$1&resultsFor=category [PT,QSA]
^/books/(.*)/(.*)$ /webapp/wcs/stores/servlet/ABCDController?format=$1-$2&resultsFor=subCategory [PT,QSA]
^/books/(.*)/(.*)/(.*)$ /webapp/wcs/stores/servlet/ASDFController?resultsFor=product [PT,QSA]

1 个答案:

答案 0 :(得分:0)

  

而不是被第四次重写规则捕获,它被第二次重写

捕获

那是因为点匹配任何字符,所以也是斜线。

用字符类替换它允许任何斜杠(并且要求该类中至少有一个字符,所以+而不是*)应该修复:([^/]+)

另一种方法是颠倒你的规则的顺序......无论如何,你应该总是尝试从大多数到最不具体的顺序编写它们。