问题在于:
我有一个网站项目(grails)我正在研究一堆无控制器的视图(这是在grails中请求的临时站点重写,没有真正的功能(因此没有控制器))并且视图是通过以下方式呈现:
"/**/$view"{
controller: 'staticViewController'
action: 'view'
}
其中“staticViewController”将视图输出为HTML,无论它在何处。
因此我的问题。
[site.com/about/something/dog.html]呈现的内容与[site.com/about/dog.html]相同,呈现与[site.com/stinkybutt/dog.html]相同
从上一个例子开始,更大的问题变得明显,因为显然我没有(或想要)名为“stinkybutt”的目录结构。
我可以在HTTPD中编写一堆垃圾重定向来解决这个问题,但我猜测有一个本机解决方案,因为其他使用grails的网站没有这个问题。
有什么建议吗?
答案 0 :(得分:0)
如果我正确理解您的问题 - 您正在寻找一种在网址映射的'**'部分应用约束的方法。我没有尝试过,但是从docs开始,您可以捕获通配符路径并将其存储在变量中。我知道你可以对变量应用约束,所以有了这些知识,我假设这样的东西可能有效:
"/$name**/$view"{
controller: 'staticViewController'
action: 'view'
constraints {
name(matches: /about/)
}
}
以上内容应仅提供约/ dog.html,并返回404其他所有内容。另一方面,如果你想要为某些网址提供dog.html除外,你可以用以下内容来否定匹配:
name(matches: /?!*(stinkybutt|smellybutt)/)
注意:我的正则表达式真的很生锈,所以你可能不得不摆弄它
答案 1 :(得分:0)
所以...看起来像控制器的视图是平的(因为我没有控制器,所有都堆叠在"视图")。因此,我创建了特定于我想要存在的每个URL的URL映射。