2010-12-01 39 views
0

我想知道是否有比現代重寫其他更簡單的方法(使用保險絲盒框架或直接在ColdFusion中)的URL轉換爲:格式'mydomain.com/username'沒有Mod Rewrite的友好URL?

來自:

http://www.somedomain.com/salmahayek 
or 
http://localhost/someApp/salmahayek 

到:

http://www.somedomain.com/index.cfm?action=profile.view&name=salmahayek 
or 
http://localhost/someApp/index.cfm?action=profile.view&name=salmahayek 

我的應用程序是現有的Fusebox 5.5應用程序。

我只需要補充一點,上面的url不是靜態的,即「salmahayek」可以是任何名稱。

任何幫助將不勝感激 感謝

回答

1

你可能會使用這樣做(不知道保險絲盒會干擾),使用404處理器的「經典」的方式,這樣的事情應該做的伎倆:

  1. 在您的服務器上設置一個404 hander,例如在.htaccess:

    的ErrorDocument 404 /404handler.cfm

  2. 設立404handler.cfm環繞的框架,如:

 
    <cfset variables.checksok = false> 
    <!--- do some checks - example ---> 
    <cfif cgi.REDIRECT_URL EQ 'salmahayek'> 
     <cfset variables.checksok = true> 
    </cfif> 
    <cfif variables.checksok EQ true> 
     <cfheader statuscode="200" statustext="OK"> 
     <cfset url.action = "profile.view"> 
     <cfset url.name = cgi.REDIRECT_URL> 
     <cfinclude template="index.cfm"> 
    </cfif> 

(未經測試,但應該工作)

+0

IIS將支持相同。這是一個黑客,但它不會失敗。 – 2010-12-01 19:00:45

0

我不確定其他人,但我不明白爲什麼Mod Rewrite會很困難,除非你在IIS上。重寫規則將只需要是這樣的:

^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L] 
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1 

我把一些額外的例子來檢查,如果用戶實際上是試圖去註冊或登錄頁面,哪一步他們在那裏。

0

我已經在過去使用Application.cfc的onMissingTemplate()方法實際完成了此操作。你可以對傳入的arguments.targetpage做一些正則表達式,或者在數據庫中查找。無論哪種方式,你都會在之後的正確頁面上執行cflocation。只要記住還要傳遞任何url參數。

有一件事,我從來沒有嘗試過,並經常想知道,但如果這可以在onRequestStart()方法處理?我在使用onMissingTemplate()方面遇到的最大問題是您正在執行的cflocation是一個全新的請求,您無法通過表單變量。是的,我知道你可以使用GetPageContext()。Forward(strUrl)來代替,但是你仍然要爲原始請求拋出整個請求生命週期。通過在onRequestStart()中這樣做你可以避免這種情況。

任何人都想測試這個呢?

1

我目前在做一些像這樣的一個我的應用程序,雖然在PHP中:

http://localhost/index.cfm/profile.view/salmahayek/

<cfset urlArgs=listToArray(CGI.PATH_INFO, "/") /> 
<cfset action=urlArgs[1] /> 
<cfset name=urlArgs[2] /> 

這完美的作品,但你必須忍受「index.cfm」如果你不想重寫。