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 に答える