2010-12-01 26 views
0

次のように、Mod Rewrite(fuseboxフレームワークを使用するかColdFusionで直接使用する)以外の簡単な方法でURLを変換するかどうかを知りたいと思います。 Mod Rewriteなしで 'mydomain.com/username'の形式で友好的なURLを使用していますか?

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

をいただければ幸いです。

  1. サーバに404ハンドラを設定します。

    (テストしたが、動作するはずではない)

 
    <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> 

:.htaccessファイルで:フレームワークを包み込むように404handler.cfm、例えばを設定

のErrorDocument 404 /404handler.cfm

  • +0

    IISはこれをサポートします。それはハックですが、失敗することはありません。 –

    +0

    こんにちは - 申し訳ありません - 上記のURLは静的ではない、つまり「salmahayek」は任意の名前である可能性があるため、ハードコードされたエントリはおそらく動作しません。 – Cheeky

    +0

    Cheeky - coldfusionのコメントによると、それはほんの一例に過ぎませんでした。それがデータベースに存在するかどうかを確認することで、404のものを盲目的にprofile.viewアクションで送信するのではなく、 – Ben

    0

    他の人はわかりませんが、あなたがIIS上にいない限り、Mod Rewriteがなぜ難しいのか分かりません。私は、ユーザーが実際に登録またはログインページとどのようなステップ、彼らはそこにいるに取得しようとしているかどうかを確認するためにいくつかの余分な例に入れ

    ^(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ではあるが、現在は1つの私のアプリの中で、このようないくつかをやってきました:

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

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

    これは完璧に動作しますが、あなたは「index.cfmに」を我慢しなければなりませんあなたが書き直したくなければ。

    関連する問題