web-dev-qa-db-ja.com

IIS7書き換えルールが新しいページにリダイレクトするのではなく404をトリガーする

最近、ほとんどのデフォルトページを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>
3
SKidd
<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}は、前述のルールでキャプチャされたサブパターン(.*)への後方参照です。

1
MrWhite