多个grails url映射
在我的Grails应用程序中,我有以下控制器&action多个grails url映射,grails,url-routing,Grails,Url Routing,在我的Grails应用程序中,我有以下控制器&action class FestivalController { def show() { [festival: Festival.get(params.id)] } } 我希望以下所有URL都映射到此控制器 /festival/show/1 /festival/show/1/glastonbury /1/music/glastonbury 其中,glastonbury和music分别是节日的名称和类型。请注意,实际上只需要I
class FestivalController {
def show() {
[festival: Festival.get(params.id)]
}
}
我希望以下所有URL都映射到此控制器
/festival/show/1
/festival/show/1/glastonbury
/1/music/glastonbury
其中,glastonbury
和music
分别是节日的名称和类型。请注意,实际上只需要ID(1)来标识节日,因此出于SEO和可读性(URL)的原因,URL中包含了名称和类型
我尝试使用以下URL映射来支持这些不同的URL
// this supports the 3rd mapping above
name showFestival: "/$id/$type?/$name?" {
controller = "festival"
action = "show"
}
// this supports the 1st mapping above
"/$controller/$action?/$id?/$name?"{
constraints {
}
}
这些支持第一个和第三个URL映射,但是如果我尝试第二个
/festival/show/1/glastonbury
它不起作用。理想情况下,我希望Grails始终生成以下形式的URL:
/1/music/glastonbury
当我使用g.createLink
或g.link
时,我还希望以下URL映射到此操作(出于历史原因):
如果看不到其他映射规则,就很难知道哪些相关,哪些不相关。。。您看到的行为与通常的优先级规则不一致,我和他们都说,当两个映射可以应用于相同的传入URI时,获胜的映射就是具有以下内容的映射:
**
或$var**
),或者如果两者相等,则*
或$var
),或者如果两者相等,则/foo/*/baz
胜过/foo/bar/*
),或者如果两者最左边的通配符位于同一位置,则约束的
/festival/show/1/glastonbury
只匹配第二个映射,因此应该可以正常工作,但是/festival/show/1
同时匹配这两个映射,因此应该由/$id/$type/$name
拾取(更少的通配符),从而产生[控制器:'festival',操作:'show',id:'festival',type:'show',name:'1']
为
“/festival/$action?/$id?/$name?”(控制器:'festival')
添加显式规则应该可以解决问题,因为/festival/show/1
将匹配此映射和/id/type/name
映射,但是显式/festival/..
映射有更多的非通配符路径段(1对无).如果看不到其他映射规则,就很难知道哪些相关,哪些不相关。。。您看到的行为与通常的优先级规则不一致,我和他们都说,当两个映射可以应用于相同的传入URI时,获胜的映射就是具有以下内容的映射:
**
或$var**
),或者如果两者相等,则*
或$var
),或者如果两者相等,则/foo/*/baz
胜过/foo/bar/*
),或者如果两者最左边的通配符位于同一位置,则约束的
/festival/show/1/glastonbury
只匹配第二个映射,因此应该可以正常工作,但是/festival/show/1
同时匹配这两个映射,因此应该由/$id/$type/$name
拾取(更少的通配符),从而产生[控制器:'festival',操作:'show',id:'festival',type:'show',name:'1']
为
“/festival/$action?/$id?/$name?”(控制器:'festival')
添加显式规则应该可以解决问题,因为/festival/show/1
将匹配此映射和/id/type/name
映射,但是显式/festival/..
映射有更多的非通配符路径段(1对无).这两个映射是您定义的唯一映射吗?您能否附上完整的UrlMappings
定义?到目前为止,我希望第二个URL(四个级别)可以工作,但第一个(/festival/show/1
)不行。@IanRoberts这不是我的全部UrlMappings.groovy
,但它们是唯一两个相关的规则。我很惊讶,有多个URL指向同一内容会更好地进行SEO。@cdeszaq通常不是,但是我用`来表示哪一个重复的URL是首选选项这两个映射是您定义的唯一映射吗?您能否附上完整的UrlMappings
定义?到目前为止,我希望第二个URL(四个级别)可以工作,但第一个(/festival/show/1
)不行。@IanRoberts这不是我的全部UrlMappings.groovy
,但它们是唯一两个相关的规则。我很惊讶,有多个URL指向同一内容会更好地进行SEO。@cdeszaq通常不是,但我用`来表示哪个重复的URL是首选选项
/festival/show/1
/festival/show/1/glastonbury