0

这是问题:

我有一个网站项目(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 的站点没有这个问题。

有什么建议么?

4

2 回答 2

0

如果我正确理解您的问题 - 您正在寻找一种方法来对 url 映射的 '**' 部分应用约束。我还没有尝试过,但是从docs中,您可以捕获通配符路径并将其存储在变量中。我知道你可以对变量应用约束,所以有了这些知识,我假设这样的事情可能会起作用:

"/$name**/$view"{
  controller: 'staticViewController'
  action: 'view'
  constraints {
    name(matches: /about/)
  }
}

上面应该只提供 about/dog.html 并为其他所有内容返回 404。另一方面,如果您希望除某些 url 之外的所有内容都提供 dog.html,您可以使用以下内容来否定匹配:

name(matches: /?!*(stinkybutt|smellybutt)/)

注意:我的正则表达式真的生锈了,所以你可能不得不摆弄它

于 2012-10-15T14:48:32.170 回答
0

所以......看起来视图对于控制器来说是平坦的(因为我没有控制器,所以都堆叠在“视图”下)。因此,我正在创建特定于我希望存在的每个 URL 的 URL 映射。

于 2012-10-15T15:56:06.270 回答