0

Mod Rewrite 以外に (fusebox フレームワークを使用するか、Coldfusion で直接) 次のように 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」は任意の名前にすることができます。

どんな助けでも大歓迎ですありがとう

4

4 に答える 4

1

404 ハンドラーを使用して、「古典的な」方法を使用する可能性があります (Fusebox が干渉するかどうかは不明です)。次のような方法でうまくいくはずです。

  1. サーバーに 404 ハンドラを設定します (.htaccess など):

    ErrorDocument 404 /404handler.cfm

  2. フレームワークをラップするように 404handler.cfm をセットアップします。

    <cfset 変数.checksok = false>
    <!--- いくつかのチェックを行う - 例 --->
    <cfif cgi.REDIRECT_URL EQ 'salmahayek'>
        <cfset 変数.checksok = true>
    </cfif>
    <cfif 変数.checksok EQ true>
        <cfheader statuscode="200" statustext="OK">
        <cfset url.action = "プロファイル.view">
        <cfset url.name = cgi.REDIRECT_URL>
        <cfinclude template="index.cfm">
    </cfif>

(テストされていませんが、動作するはずです)

于 2010-12-01T18:54:08.583 に答える
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」を我慢する必要があります。

于 2010-12-02T13:34:35.203 に答える
0

私は過去にApplication.cfcのonMissingTemplate()メソッドを使用してこれを実際に実行しました。渡されたarguments.targetpageに対していくつかの正規表現を実行するか、データベースでルックアップを実行できます。どちらの方法でも、後で正しいページへのcflocationを実行します。URLパラメータも渡すことを忘れないでください。

私が試したことがなく、よく疑問に思うことが1つあります。これは、代わりにonRequestStart()メソッドで処理できるかどうかです。onMissingTemplate()を使用する際の最大の問題は、完全に新しいリクエストであるcflocationを実行していて、フォーム変数を渡すことができないことです。はい、おそらく代わりにGetPageContext()。Forward(strUrl)を使用できることはわかっていますが、それでも元のリクエストのリクエストライフサイクル全体をスローします。onRequestStart()でこれを行うことにより、これを回避できます。

誰かがこれをテストしたいですか?

于 2010-12-01T20:29:27.720 に答える
0

他の人についてはわかりませんが、IIS を使用していない限り、なぜ Mod Rewrite が難しいのかわかりません。書き換えルールは、単純に次のようにする必要があります。

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

ユーザーが実際に登録ページまたはログイン ページにアクセスしようとしているかどうか、およびそのページでのステップを確認するために、いくつかの例を追加しました。

于 2010-12-01T19:47:19.663 に答える