grails - 在 Grails URL 中包含名称

标签 grails groovy url-rewriting seo

在我的 Grails 应用程序中,我有几个域类,比如 AuthorBook。我正在使用默认的 URL 映射:

static mappings = {
  "/$controller/$action?/$id?"{
    constraints {
      // apply constraints here
    }
  }
}

所以显示 id 为 2 的书的相对 URL 是 /book/show/2。要显示 ID 为 5 的作者,它是 /author/show/5AuthorBook 类都有一个 name 属性,但这不能保证是唯一的。

出于 SEO 原因,我想在这些 URL 中包含此名称,例如将显示书籍的 URL 更改为 /book/show/2/the+davinci+code 并将显示作者的 URL 更改为 /author/show/5/dan+brown.

为了防止破坏任何现有的(外部)链接到我的页面,理想情况下我希望支持这两种格式,这样以下任一格式都将显示 Dan Brown 的页面

  • /author/show/5
  • /author/show/5/dan+brown

从现在的位置(仅带 ID 的 URL)到我想去的地方(也支持带 ID 和名称的 URL),最简单的方法是什么?

最佳答案

唐,

你有两个选择。首先,如果您根本不打算在您的逻辑中使用名称(这似乎是一个选项,因为您已经拥有唯一 ID),那么您可以通过以下方式修改 url 映射:

static mappings = {
  "/$controller/$action?/$id?/$extra?"{
    constraints {
      // apply constraints here
    }
  }
}

这将为所有请求添加额外的可选参数。如果你只想为 AuthorBook Controller 做这件事,那么你应该像这样修改你的 UrlMappings.groovy

static mappings = {
    "/author/show/$id?/$name?" (controller:"author", action: "show")
    "/book/show/$id?/$name?" (controller:"book", action: "show")
    "/$controller/$action?/$id?" {
          constraints {
          // apply constraints here
          }
    }
}

前两条规则将匹配“/author/show/10/dan+brown”以及“/author/show/10”这样的 url,您可以从 show 访问 name 参数通过 params.name 的方法。

关于grails - 在 Grails URL 中包含名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10495703/

相关文章:

Grails 应用程序在一定时间间隔后 MySQL 连接丢失

java - 搜索列表中的元素

regex - 具有两种不同条件的 .htaccess RewriteRule

apache - 正确设置重定向 410(已消失)

jquery - 一对多的图像

sql-server - Grails dbCreate ='validate' 无法识别现有表

java - 奇怪的 grails 错误信息

grails - 添加自定义 jar grails 2.4.3

java - grails 中 << 运算符定义的用法是什么?

c# - .NET URI : How can I change ONE part of a URI?