Grails动态url重写

Grails动态url重写,grails,url-rewriting,url-mapping,Grails,Url Rewriting,Url Mapping,我正在尝试重写特定控制器(和操作)的URL,例如: www.mysite.com/user/search?sex=male&from_age=18&to_age=19 将成为 www.mysite.com/user/search/sex/male/from_age/18/to_age/19 我知道我可以通过Grails的url重写来做到这一点,大致如下: "/user/search/sex/$Sex/from_age/$from_age/to_age/$to_age" {

我正在尝试重写特定控制器(和操作)的URL,例如:

www.mysite.com/user/search?sex=male&from_age=18&to_age=19
将成为

www.mysite.com/user/search/sex/male/from_age/18/to_age/19
我知道我可以通过Grails的url重写来做到这一点,大致如下:

"/user/search/sex/$Sex/from_age/$from_age/to_age/$to_age" {
  controller = 'user'
  action = 'search'
}
我面临的问题是,用户可以同样轻松地触发url,如:

www.mysite.com/user/search/sex/male/to_age/19/location/chicago
i、 e.url根据用户在搜索表单中输入的搜索条件是动态的


有没有办法按照Apache的
mod_rewrite
动态重写url,这样我就可以使用
param_name/param_value
而不是
?param_name=param_value

将通配符url映射到搜索操作,但您必须自己执行参数解析:

UrlMappings.groovy:

"/user/search/$query**" {
    controller = 'user'
    action = 'search'
}
这将把url静态部分之后的所有内容作为单个字符串提供给您

i、 e.
www.mysite.com/user/search/sex/male/to_age/19/location/chicago
将为您提供
params.query='sex/male/to_age/19/location/chicago'

但是,这些类型的url不参与动态url重写,因此在尝试链接到它时,您必须自己构建url

将paramMap转换为该样式的查询字符串的快速不安全(未缩放)示例:

def queryStr = params.collect({ n,v -> "$n/$v" }).join('/')
g.createLinkTo(controller: 'user', action: 'search', params: [query: queryStr])

url映射中的
from_age
与示例url中使用的
to_age
字符串不匹配。用户不会得到任何东西。是的,这是我的观点,我需要找到一种动态创建映射的方法,以便foo/bar变成?foo=bar,而不管foo或bar是什么