【问题标题】:Grails dynamic url rewritingGrails 动态 url 重写
【发布时间】:2013-07-19 15:32:52
【问题描述】:

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

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'
}

我面临的问题是用户可以很容易地触发如下网址:

www.mysite.com/user/search/sex/male/to_age/19/location/chicago

即url 根据用户在搜索表单中输入的搜索条件是动态的

是否有按照 Apache 的 mod_rewrite 的行动态重写 URL 以便我可以使用 param_name/param_value 而不是 ?param_name=param_value?

【问题讨论】:

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

标签: grails url-rewriting url-mapping


【解决方案1】:

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

UrlMappings.groovy:

"/user/search/$query**" {
    controller = 'user'
    action = 'search'
}

这会将 URL 的静态部分之后的所有内容作为单个字符串提供给您。

即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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2011-05-04
    • 2015-05-07
    • 2011-06-02
    • 2021-11-06
    • 2014-04-26
    相关资源
    最近更新 更多