3

IIS URL 書き換えモジュールを使用して、書き換えマップと書き換えルール (リダイレクトではない)を使用して内部 URL をフレンドリ URL でマスクしています。これは私の書き換えマップです:

<rewriteMap name="HashTest">
     <add key="/nohash" value="/nohash.aspx" />
     <add key="/hash1" value="/hashtest.aspx#hash1" />
</rewriteMap>

これが私の書き換えルールです。

<rule name="Rewrite rule1 for HashTest">
       <match url=".*" />
       <conditions>
           <add input="{HashTest:{REQUEST_URI}}" pattern="(.+)" />
       </conditions>
       <action type="Rewrite" url="{C:1}" />
</rule>

これはハッシュタグのない URL で機能するため、www.mysite.com/nohashをクエリするたびに、ブラウザーで URL を変更してwww.mysite.com/nohash.aspxのコンテンツが表示されます。

ハッシュタグを含む URL に書き換えようとすると、404 エラーが発生ます。

ここで、ルール アクション タイプをRedirectに変更すると、リダイレクトが正常に行われるため、書き換えで機能しない理由がわかりません。

要求時にハッシュタグがサーバーに送信されないことはわかっていますが、書き換えマップが<add key="/hashtest.aspx#hash1" value="/hash1" />.

リダイレクトがハッシュタグで機能するのに、書き換えが機能しない理由についての洞察はありますか?. 私は IIS リダイレクトと結婚していません。別のモジュールまたはアプローチがあれば、それを使用できます。大歓迎です

4

1 に答える 1

8

ハッシュ記号の後の部分 (正式にはフラグメント識別子と呼ばれます) は、URL のクライアント側のみの部分です。サーバーに送信されることはありません。そのため、書き換えでは機能せず、リダイレクトでのみ機能します。hashtest.aspx#hash1書き換えルールは一致しますが、IIS は実際には という名前のファイル(つまり、拡張子が ) のファイルを開こうとします.asp#hash1。拡張子が ASP.NET にリンクされていないため、このファイルは通常の ASP ページとして処理されません。また、IIS は既定で既知の拡張機能の要求のみを許可するように構成されているため、コンテンツがまったく表示されない可能性があります。

于 2013-03-15T22:32:09.497 に答える