最近、ほとんどのデフォルトページをdefault.htmからdefault.aspに置き換えました。
サブフォルダーの場合、書き換えルールは正常に機能します。 default.htmが削除されたexample.com/help/default.asp domain.com/help/default.htmと入力すると、default.htmが存在しないため、新しい.aspページが正しく表示され、404は表示されません。
ルートでexample.com/default.htmと入力すると、default.aspにリダイレクトされず、代わりに、作成した404ページにユーザーが送信されます。
完全一致とワイルドカードを比較しましたが、違いはありません。
なぜ404でリダイレクトがないのですか?
<rule name="homepage" patternSyntax="Wildcard" stopProcessing="true">
<match url="*example.com/default.htm" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/default.asp" redirectType="Permanent" />
</rule>
PDATE:これは、htmからaspへのサブフォルダーリダイレクトで機能します。
<rule name="downloadhome" patternSyntax="Wildcard" stopProcessing="true">
<match url="*download/default.htm" ignoreCase="true" />
<action type="Redirect" url="/download/default.asp" redirectType="Permanent" />
</rule>
<match url="*example.com/default.htm" ignoreCase="true" />
url
属性は、ホスト名ではなく、URLパスのみと一致すると思います。したがって、上記は次のようになります。
<match url="^default\.htm" ignoreCase="true" />
これは、ドキュメントルートの「default.htm」と一致するか、パターン「default\.htm
」を使用して「default.htm」と一致します。
これは、patternSyntax="ECMAScript"
で<rule>
を使用します(正規表現を使用するため)。または、patternSyntax
属性を完全に削除します。これはデフォルトのオプションなので
両方のシナリオに1つのルール(ドキュメントルートとサブディレクトリの要求)を設定するには、代わりに次のようにすることができます。
<rule name="replacedefaulthtm" stopProcessing="true">
<match url="(.*)default\.htm$" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/{R:1}default.asp" redirectType="Permanent" />
</rule>
ここで、{R:1}
は、前述のルールでキャプチャされたサブパターン(.*)
への後方参照です。