2012-10-15 58 views
0

這裏的問題:Grails的 - 管理視圖的URL

我有一個網站項目(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

好吧,那麼你想在單行問題中做什麼?讓控制器動態查找基於Url的視圖? –

+0

有謊言的問題 - 只有一個控制器只呈現視圖。實質上,我希望site.com/about/dog.html只能在該URL中可用。除了大量的顯式映射/重定向之外,我看不到一種方法來解決這個問題。 – user1612272

+0

你的控制器可以處理這個並在響應中添加一個404。 –

回答

0

如果我正確理解你的問題 - 你正在尋找一種方法來對url映射的'**'部分應用約束。我沒有嘗試過,但是從docs開始,您可以捕獲通配符路徑並將其存儲在變量中。我知道你可以應用約束到一個變量,所以用這些知識我假設這樣的事情可能工作:

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

以上應該只會上漲約/ dog.html和一切返回404。

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

注:在你想要的一切就可以提供dog.html除了某些網址,另一方面,你可以用類似否定的比賽我正則表達式是真的生疏了,所以你可能亂動它

+0

這實際上是我一直在努力的,因爲我沒有看到更好的方法;試圖讓約束髮揮很好.... – user1612272

+0

如此接近......這限制了「/ about /」中的項目,但允許任何其他視圖顯示在「/ about /」(「/news/stuff.html」可以渲染爲「/about/stuff.html」) – user1612272

0

所以...看起來像視圖平坦的控制器(因爲我沒有一個控制器,所有堆積在「意見」)。因此,我將創建特定於每個我想存在的URL的URL映射。