我要求使以下路径有效。 根据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]
答案 0 :(得分:0)
而不是被第四次重写规则捕获,它被第二次重写
捕获
那是因为点匹配任何字符,所以也是斜线。
用字符类替换它允许任何但斜杠(并且要求该类中至少有一个字符,所以+而不是*)应该修复:([^/]+)
另一种方法是颠倒你的规则的顺序......无论如何,你应该总是尝试从大多数到最不具体的顺序编写它们。