IIS 7.0用URL書き換え(リライト)モジュール(リンク)の最新リリースと、.NET Framework 3.5 SP1へのASP.NETルーティング(リンク)の統合により、多くのASP.NET開発者が、この2つの機能がどのように相互に関連し合い、それぞれをいつ使用すべきかについて質問している。
Ruslan Yakushev氏は、有益な記事をLearnIIS.net上に掲載している(リンク)。
本質的な違いは、IIS URL書き換えはASP.NETルーティングよりも低いレベルで処理され、クライアントには見えないという点である。
Ruslan氏は、IIS 7 URL書き換えプロセスのビジュアルワークフローを(リンク)提供している。URL書き換えモジュールはリクエストがリクエストハンドラ(ASP.NETで管理されたASPXハンドラなど)に渡される前に起動するということが分かる。IIS URL書き換えは、特定のリクエストハンドラについて認識していない。
彼は、ASP.NETルーティングプロセスのビジュアルワークフロー(リンク)も提供している。ASP.NETルーティングはリクエストディスパッチャであり、特定のリクエストがどのハンドラにルーティングされるべきかを十分に認識しているということが分かる。
下記は、Yakushev氏の説明からの引用である。
- 1. URL書き換えは、リクエストがWebサーバーによって処理される前にURLパスを操作するために使われます。URL書き換えモジュールは、書き換えられたURLをどのハンドラが最終的に処理するのかについて何も知りません。また、実際のリクエストハンドラは、URLが書き換えられたことを知らない場合もあります。
- 2. ASP.NETルーティングは、リクエストされたURLパスに基づいてリクエストをハンドラにディスパッチするために使われます。URL書き換えとは対照的に、ルーティングコンポーネントはハンドラについて認識しており、リクエストされたURLに対する応答を生成すべきハンドラを選択します。ASP.NETルーティングを、高度なハンドラマッピングメカニズムとして考えることができます。
- IIS URL書き換えモジュールは、どのようなタイプのWebアプリケーションでも使用できます。これには、ASP.NET、PHP、ASP、静的ファイルが含まれます。ASP.NETルーティングは、.NET FrameworkベースのWebアプリケーションでのみ使用できます。
- IIS URL書き換えモジュールは、アプリケーションツールに使用されているIISパイプラインモードが統合であるかクラシックであるかに関係なく、同じように機能します。ASP.NETルーティングの場合は、統合パイプラインモードを使用することが望ましいとされます。ASP.NETルーティングはクラシックモードでも機能できますが、その場合、アプリケーションURLにファイル拡張子を含める必要があるか、IISで「*」ハンドラマッピングを使用するようにアプリケーションを設定する必要があります。
- URL書き換えモジュールは、ドメイン名、HTTPヘッダー、サーバー変数に基づいて書き換えの決定を行うことができます。デフォルトでは、ASP.NETルーティングはURLパス、およびHTTP-Methodヘッダーとのみ機能します。
- 書き換えのほかに、URL書き換えモジュールは、HTTPリダイレクトの実行、カスタムステータスコードの発行、リクエストの中止を行うことができます。ASP.NETルーティングはこれらのタスクを実行しません。
- URL書き換えモジュールは、現在のバージョンでは拡張可能ではありません。ASP.NETルーティングは十分に拡張可能で、かつカスタマイズ可能です。