Grails动态url重写
我正在尝试重写特定控制器(和操作)的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" {
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是什么