質問

(更新:。。答えは、私はそれが思った以上に主観的な表示されますように私はコミュニティのwikiにこの質問を変換し、人のニーズに応じて、複数回答あり)

私は唯一のApplication.cfcとindex.cfmにが含まれたフォルダを持っている場合は、

、動的に生成されたURLを処理するための高速で信頼性の高い方法は何ですか?すなわち、対応する物理.CFMファイルを持っていないURLをます。

この例のURLは、404を生成し、それは、DB内のページを検索し、index.cfmに経由して、それを返す必要があります:

http://www.myserver.com/cfdemo/mynewpage.cfm

私が使うべき onMissingTemplate() Application.cfcの中で不足しているファイルを処理しますか?この方法は、onRequestStartメソッド()、onRequest()およびonRequestEndの()を処理しませんので、それは避けなければならない場合、私は疑問に思う。

代わりに、私ができるセットアップ私はIIS(またはApacheのmod_rewriteのを)使用していますので、ISAPIRewriteルール

# IF the request is not /index.cfm, doesn't exist and ends in cfm or html,
# rewrite it. Pass the requested filename $1.$2 as the 1st param: cgi.page
# append the remaining url params $4 ($3 is the ?)
RewriteCond %{SCRIPT_NAME} ^(?!/index.cfm)(.*)$
RewriteCond %{REQUEST_FILENAME}     !-f
RewriteCond %{REQUEST_FILENAME}     !-d 
RewriteRule ^\/(.*)\.(cfm|html)(\??)(.*)$   /index.cfm?page=$1.$2&$4 [I,L]

これらの方法で適切ですか、私はこの目標を達成するためのより良い方法をしないのですか? ColdFusionがApplication.cfcのに組み込まれた機能のこのタイプを持っているべきであると思われます。たぶん私はちょうどそれが欠けています。

役に立ちましたか?

解決

WebサーバレベルでのURL書き換えと間違って何もありません。私はそれに投票したい。

他のヒント

デフォルトでは、CFのみCFM / CFCのリクエストを処理しているため、

、あなたはこのようなApplication.cfcの何かの始まりで行うことができます:

<cfif Right(cgi.SCRIPT_NAME, 9) NEQ "index.cfm">
    <!--- analyze the SCRIPT_NAME and start processing --->
</cfif>

Webサーバの設定を使用して他のファイルタイプのために私が見ることができる唯一の方法です。しかし、その代わりに書き換えルールを作成するカスタム404ハンドラを使用しようとすることができます。あなたはcgi.QUERY_STRINGでコンテキストを取得することができますIISを使用した場合、少なくとも、ダミーページを設定した場合、の404.cfmのと言う(それが存在する必要はありません)、次のチェックを入れて< em>の前にの前の例:

<!--- trap 404 requests triggered by IIS --->
<cfif right(cgi.SCRIPT_NAME, 7) EQ "404.cfm">
    <cflog file="mylogfile" text="404 error triggered by IIS. Context: #cgi.QUERY_STRING#">
</cfif>

Apacheのためには、ハンドラ以下を使用することが可能であるが、私はあなたがこの場合の文脈を抽出することができるかどうかはわからない。

ErrorDocument 404 /404.cfm

あなたはSESのURLのためにこれをやっている場合は、私はアドバイスの2枚を提供したいです。

最初は時間が経つにつれて、彼らが減っても問題ということです。 Googleは、例えば、URLがクエリデータを含める必要があることを認識しています。

第二:CFは、ネイティブ形式のホスト名/ file.cfm /パラメータ1 /パラメータ2にSESのURLを処理することができます。レイ・カムデンの BlogCFC には、例えば、そのように動作します。これは、CF8ではデフォルトでオンになっているが、CF7で有効にする必要があります。私はこの上で便利な多くの情報を持っていないが、それはグーグル(またはビンビン、または何でも)を簡単にする必要があります。

あなたがそれを許可することができる場合、私は以下のようなURLを変換しようと思います:

http://www.myserver.com/cfdemo/mynewpage.cfm

http://www.myserver.com/cfdemo/mynewpage OR
http://www.myserver.com/index.cfm/cfdemo/mynewpage

あなたはonRequestメソッドを失わないように。最初のものは、ウェブサーバレベルで、そうApacheまたはIISで行うことができます。もう一つは、単にColdFusionで行うことができます。 http://www.cfcdeveloper.com:これを参照してください。 /index.cfm/2007/4/7/Coldfusion-SES-URLするます。

あなたが最後に.cfmを持っている必要がありそうでない場合、あなたはそれを取り除くためにApacheまたはIISでのURL書き換えパッケージを使用することができ、その後、CFMページに要求を転送したり、onMissingTemplateでやっているものを行います。私はあなた次第onRequest方法を失っ伴わない溶液を選ぶことを試みるが、と思います。

私は間違いなく、URLの書き換えのために行くと思います。だけでなく、それは、より予測可能な、まだ一般化アプローチであるが、それはCFサーバから文字列解析の負荷を大幅に軽減します。さらに、それは、それによってあなたのonapplicationstart、onRequestStartメソッド、および他のイベントの利益を得て、実際のファイルへの要求を処理CFになります。

はさておき、私は個人的にはいつも/index.cfm/foo/bar/のようなURLがunproとハック見て発見したとして。また、ファイルの拡張子や末尾のスラッシュのいずれかで終わらないURLは、(のような/ fooの/バー)技術的に間違った(古い学校の静的なサイトの規約あたり最低でも)とおそらく同様に回避されるべきです。ベン・ドゥームは、という彼の主張を取得する場所私も好奇心旺盛になるだろう「最初は時間が経つにつれて、彼らが減っても問題ということである。グーグルは、例えば、URLがクエリデータを含める必要があることを認識しています。」私の経験では、私は実際にはまったく逆が真であることが判明しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top