我有一个产品列表我试图为其创建SEO友好的URL。
示例
domain.com/product/cell-phone-razor
"手机-剃刀"是动态的db
我已使用以下代码成功实现此行为
"/product/$url"(controller: "product", action:"show")
但是,在尝试映射与页面URL无关的其他操作时会出现问题。示例我有一个Ajax URL domain.com/product/setPrice
,它被映射到show动作。
除了上一个映射之外,我还可以通过在urlmapping中添加以下内容来解决这个问题。
"/product/setPrice" {
controller = "product"
action = "setPrice"
}
是否有更好的方法来配置我的网址映射,以便我不需要为每个操作映射添加规则?
答案 0 :(得分:0)
在我们的应用程序中,我们使用以下方法 - 不是说完美的方法。基本上我们将URL片段(被搜索引擎高兴地忽略)附加到URL的SEO部分。
name product: "/$productName-p$productId" {
controller = 'product'
action = 'show'
constraints {
productName matches: '.+'
productId matches: '^[0-9]+$'
}
}
在您的情况下,网址应该是domain.com/product/cell-phone-razor-p123455
,其中123456
是产品ID。
答案 1 :(得分:0)
虽然不像我想的那样动态,但这似乎是最好的解决方案。
"/product/$url"(controller: "product", action:"show") {
constraints {
url(validator: {
return !(it in
['setPriceAction', 'setAnotherAction']
)
})
}
}