2011-03-08 70 views
0

得到這個網址SES URL ColdFusion的 - 沒有MVC

http://localhost:8500/users.cfm?userid=John

,通過從DB

WHERE userid = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#url.userid#"> 

如何能在相同的配置文件可以像訪問獲得用戶的詳細信息加載用戶的個人資料這個:

http://localhost:8500/John

而不是用戶輸入「users.cfm?userid = John」,他們只需輸入他們想查看的用戶的用戶標識。

在CF9,IIS7

我可能需要安裝http://www.iis.net/download/urlrewrite的解決方案,請指教。

感謝您的幫助。

回答

2

使用URLRewrite,讓重寫器將所請求的URL(例如/John)設置爲請求標題並將其轉發給單個.cfm文件(即front controller)。在.cfm文件(例如frontcontroller.cfm)中讀出請求標題(即GetHttpRequestData().headers)並相應地處理 - >users.cfm?userid=john

+0

如果您喜歡使用OnRequest或OnMissingTemplate的想法,可以使用URLRewrite將/index.cfm附加到僅限目錄的請求。不知道[dis]優點會是什麼。 – jtpereyda 2011-03-08 16:16:00

+0

謝謝,將調查此事。 – 2011-03-08 17:44:03

1

副手,也許你可以使用Application.cfc中的OnRequest方法。該方法允許您過濾請求並給予特殊處理。

http://www.bennadel.com/blog/805-ColdFusion-Application-cfc-OnRequest-Creates-A-Component-Mixin.htm

在你的榜樣,你可以採取 「約翰」,或任何字符串,如果它存在於根,

<cfinclude template="#application.baseHREF#/users.cfm?userid=#userID#" /> 

如果您在OnApplicationStart定義baseHREF。

+0

要使用非.cfm擴展名,您需要配置Web服務器以告訴CF來處理這些(例如.html),我不認爲這會處理類似文件夾的請求(即'/文件夾')。 – orangepips 2011-03-08 15:38:00

+0

好點。我沒有意識到ColdFusion受限於這種方式......無賴。 – jtpereyda 2011-03-08 16:15:02

+0

@orangepips謝謝你4的貢獻。有東西。 – 2011-03-08 17:48:26

1

如果你決定使用像ISAPI重寫(不是免費的),它允許你寫重寫類似於那些在Apache中使用的規則的工具,你要補充:

RewriteRule ^(.*)$ /users.cfm?userid=$1 [NC,L,QSA] 

您還可以添加文件夾或其他網址排除從這一規則的東西,如:

RewriteCond %{REQUEST_URI} !^(assets|images|xml|tasks) [NC] 
RewriteRule ^_admin/(.*)$ /_admin/index.cfm/$1 [NC,L,QSA] 

我會建議使用一個重寫規則處理過它CFML,以減少由CF服務器處理的處理。