2

URL 書き換えのために HttpModule で HttpContext.RewritePath を使用すると問題が発生しました。

環境: Windows Server 2008 R2、IIS 7.5 統合モード、.Net 4.0 私のプロジェクトでは、ほとんどの URL が同じ aspx ページ (Handler.aspx) に書き換えられます。aspx ページは、URL に基づいてさまざまなことを行います。

例:

"/en/abc/" が Handler.aspx に書き込まれます。[ページ出力: This is abc]

"/en/test/" が Handler.aspx に書き込まれます。[ページ出力: これはテストです]

「/en/test/a.html」は Handler.aspx にも書き込まれます。[ページ出力: これはテストです]。文字列 "test" のみをチェックし、文字列 "/a.html" を無視すると、出力は URL "/en/test/" と同じになります。また、a.html が wwwroot フォルダーに存在しない場合、URL はテストに適していません。

htm/html 拡張子を含む 2 つ以上のリクエストが同時に来ると問題が発生しました例: "/en/test/a.htm" または "/en/test/a.html"

その後、HttpContext.RewritePath はどのリクエストに対しても機能しません。Handler.aspx は呼び出されなくなり、入力した URL に関係なく、ページ出力は常に「This is test」になります。問題が発生したときの HTTP ステータス コードは 200 です。また、実際の aspx ページ (Handler.aspx) にアクセスすると、同じ内容の「This is test」も表示されます。サーバー側のキャッシュのようです。この問題は、IIS でアプリ プールをリサイクルすることで解決できます。

次の場合、問題は発生しません。

  1. これら 2 つのリクエストには少し時間をおいてアクセスしてください。たとえば、最初に「/en/test/a.html」にアクセスして 3 ~ 5 秒待ってから、「en/test/a.html」に再度アクセスします。すべて正常に動作します。

  2. IIS パイプラインを統合モードからクラシック モードに変更します。「/en/test/a.html」にアクセスすると、IIS 404 ページが表示されます。

  3. HttpContext.RewritePath の代わりに Server.Transfer を使用すると、すべて正常に動作します。

  4. URL に .php、.jsp、.xml が含まれていても問題は発生しません

その根本原因を見つけなければなりません。この問題の原因として考えられる理由はありますか?

4

0 に答える 0