2012-03-28 32 views
4

CF10中的REST支持是否可以替代使用URL Rewrite/ModRewrite來實現SEO友好的URL?編寫一個定義GET和POST方法的薄層,並在正確的頁面中定義<cfinclude>可以使用REST代替CF10中的URL重寫嗎?

或者它會對服務器徵稅太多,最好讓它到Web服務器來處理?

一旦進入CFML,版本控制和維護就容易多了。

感謝

回答

1

@Henry REST是不是URL重寫的替代品。

首先,REST URL有格式。

http://localhost:8500/rest/App_Name/Rest_Path

「休息」 的部分是強制性的。如果您想更改「休息」,可以在web.xml中更改它(更改URL映射)。

App_Name不是必需的。服務器可以有一個默認的休息應用程序。對於默認應用程序,您不需要指定AppName。爲了訪問其他(非默認)休息應用程序,您應該指定AppName。您可以在管理中的Rest服務註冊頁面中設置應用程序默認值。

Rest_Path標識CFC和需要對HTTP調用被調用在CFC的功能。

如果這些URL格式是可接受的,則這些格式的URL可以被映射到在CFC的特定功能。當對URL進行HTTP調用時,相應的CFFunction將被調用。通過使用REST,您正在訪問CFC中的函數。以這種方式直接訪問CFC或CFM是不可能的。但是在函數中你可以實現你想要的任何東西(比如調用CFC,調用另一個CFM等)。

這個回答是否回答你的問題?

感謝, 保羅

+0

酷,所以它似乎是可行的,如果我改變「休息」到'web.xml'中的其他東西,並沒有AppName。翻譯REST網址爲CF重?它會在搜索引擎抓取時殺死CF嗎? – Henry 2012-04-24 00:47:55

2

如果我理解你說的話(也許我不會),您將創建一個處理程序,將截獲的請求,解析出變量,然後通過REST請求相應的頁面?如果這是你的想法,那麼我不確定我是否按照你所能獲得的結果去做。 REST(通常而言)更多的是用於獲取方法的通用HTTP API--而不是頁面/內容範例(我想這可能是)。

如果你正在尋找的是使用CF作爲重寫SEO URL處理程序,你現在可以做到這一點。要使用IIS示例,您可以創建一個「自定義404」處理程序 - 一個CFM頁面 - 獲取所有與特定文檔無關的請求。該處理程序通過解析URL來梳理變量,然後「包含」正確的cfm代碼或頁面。這聽起來有點像你想要的 - 但它不是真的REST。

也許你想這樣做某種CFHTTP通話,你搶,你需要從URL構建查詢字符串的內容的。因此,如果有人加載一個網址,如:

blah.com/productid/550

你可以編寫代碼,像這樣 -

<cfhttp 
url="http://blah.com/index.cfm?#listfirst(cgi.script_name,'/')#=#listlast(cgi.script_name,'/')#"/> 

<cfoutput>#cfhttp.filecontent#</cfoutput> 

雖然這會做的伎倆,你會使用cfinclude會更好而不是這種方法。類似上面的方法實際上會爲每個請求生成一個附加線程 - 一個用於瀏覽器請求的線程,另一個用於cfhttp請求。

最後,我會禮貌地建議,URL重寫(在Apache或IIS)是更有效和普遍比較「傳統」,因此可能是一個更好的選擇。

+1

我想他問的是如果CF10處理類似REST的地址到組件的路由 以某種方式組件,可以簡單地用作路由請求和輸出html的主要方式。我不知道答案,但我想答案的主要因素是它是允許任意輸出內容,還是隻允許CF支持的XML/JSON(如Web服務)。 – 2012-03-29 15:46:46

+0

我還沒有嘗試過,但CF10引入了REST支持,它可以對URL執行regex,並將GET/POST/PUT/DELETE映射爲CFC的方法。所以我想知道我們是否可以使用該功能製作具有友好URL的SEO網站,並將責任從Web服務器的重寫模塊遷移到CF. – Henry 2012-03-29 17:33:38

+0

啊..我明白你在駕駛什麼。我有點好奇,爲什麼你認爲這會比URLrewrite更好或更易於管理?似乎你正在用一個由Rube Goldberg製作的相當簡單的設備替換:) – 2012-03-29 21:31:19

1

即使能做到這一點,我會說這是增選錯誤的工具做了錯誤的工作。 URL重寫是Web服務器的工作,而不是CF服務器,而Web服務器將比CF更好。 CF的REST接口用於構建API,而不是用於URL重寫。

如果其中一個想要用CF處理URL重寫,那麼使用404處理程序或onMissingTemplate()處理程序在這裏會更合適,不是嗎?至少你正在使用一個工具(如果不是最好的)。

至於版本控制... .htaccess文件只是一個文本文件,就像CFML文件一樣。我沒有仔細查看IIS的重寫模塊,但是它可以不使用文本文件來配置/維護其重寫嗎?很明顯,Apache可以,我們使用Helicon的ISAPI重寫模塊,它使用了一個mod_rewrite兼容的.htaccess文件。

在我看來,你似乎試圖通過使用會懲罰生產性能的方法來讓開發人員的工作更輕鬆。 「讓開發人員的生活更輕鬆」絕不應成爲危及生產環境的理由(顯然,IMO)。

+0

謝謝!非常好的答案 – Henry 2012-05-16 06:00:48

+1

我在這裏添加的另外一件事,亨利......直到我按下「發送」之後,我纔想到它,是.htaccess和[但是IIS做到這一點]是一個行業認可的,理解的方法(如果我們還不知道如何去做,那麼它是有據可查的)。試圖用CF REST機制來做到這一點是「定製的」,因此如果第三方需要,就不那麼容易。 「不要重新發明輪子」,基本上,我猜。 – 2012-05-16 06:09:41

相關問題