2016-12-28 11 views
2

私はcoldfusion 10とiis 7.5を使用しており、クエリ文字列を使用しないようにプロジェクトのカスタムルーティングを作成しようとしています。例えばColdfusion - 特定のファイルに対してIIS 404.0エラーを回避し、手動ルーティングを行う

、以下のURL:

www.myTestWebsite.com/subfolder1/subfolder2/

その後、ルートフォルダに存在するとrouter.cfmファイルから渡すべきですウェブサイトのドメイン(この場合は/ subfolder1/subfolder2 /)の後の文字列に基づいて、coldfusionは何を表示し、どのように決定するかを決定します。

私は1つのことを除いてすべてを動作させることができました。 index.cfm(または.html、または任意のデフォルトファイル)が/ subfolder1/subfolder2/pathに存在しない場合、IISは404.0エラーを表示します。しかし、フォルダ構造を作成してそこに空のindex.cfmファイルを追加すると、ルーティングは期待通りに機能し、空のindex.cfmは無視され、実装したロジックに従って移動します。

(CF管理者、IIS、htaccess、またはその他の手段を介して)そのファイルが存在するかどうかを確認し、404.0をスローし、代わりにroute.cfmを通して処理する方法はありますか?

答えて

3

<rule name="wvcms" patternSyntax="Wildcard" stopProcessing="true"> 
    <match url="*" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="/route.cfm?cmspath=/{R:1}" /> 
</rule> 
+0

注:これは、HTTPS(IIS URL書き換え拡張機能がインストールされている必要があり:// URL再書き込み機能を使用すると、おそらくこの問題を解決する最も簡単な方法です。 –

+0

このような機能があります。キーはURL書き換え拡張機能です。 –

3

カスタムColdFusionサーブレットマッピングを使用してこれを行うことができます。以下の情報は、Taffy ColdFusion REST APIフレームワークのドキュメントに基づいています。あなたのweb.xmlに
http://docs.taffy.io/3.1.0#404-when-your-api-is-in-a-subdirectory

、追加のサーブレットマッピングを追加する必要があります。

<servlet-mapping> 
    <servlet-name>CFMLServlet</servlet-name> 
    <url-pattern>/api/index.cfm/*</url-pattern> 
</servlet-mapping> 

Tomcatがそのマッピングに2つのワイルドカードの使用をサポートしていないためです。 TomcatにACFまたはLuceeをインストールすると、url-patternのindex.cfm/*を持つマッピングを持つweb.xmlが作成されますが、残念なことにこの制限のために、変更することはできません。/index.cfm/

上記のXMLでは、1つのワイルドカードしかないことがわかりましたが、私はindex.cfmへのパス全体を指定しているため、1つしか必要ありません。 (/api/index.cfmは/api/index.cfm/myResourceの404の私の例と一致しているので注意してください...あなたのものはあなたのindex.cfmの場所と一致するはずです)。

私はweb.configファイルに書き換え使用
+0

は、あなたの答えケビンいただきありがとうございます。私はこの分野では全く新しいということを明確にすべきでしたので、回答のほとんど(あなたのものを含む)は私の耳に奇妙に聞こえるでしょう。チャット機能を利用してリアルタイムで話すことができますか? –

+0

あなたはその答えを歓迎します。あなたの問題を解決するのに役立つことを願っています。 Stack Exchangeサイトの目的は、共有された、目に見えて透明なコミュニティ参加に基づいてコミュニティを育成し、ポスターを解決することです。より多くの質問がある場合は、会話と回答を共有できるようにStack Overflowに公開することをお勧めします。 –

+0

P.S.あなたの問題を解決するために私の答えが働いたら、それを「受け入れられた」と覚えておいてください。ありがとう! –

関連する問題