0

IIS7でSitefinityCMSWebサイトを実行しています。404ステータスを返そうとすると、奇妙な結果がいくつか表示されます。

次のようなURLにアクセスした場合:

www.mysitefinitywebsite.com/test.co.uk(これは無効なアドレスだと思いますが、誰かがCMSに入力しました)

上記はASPXページではないため、IISが次のコードでエラーを処理すると思います。

    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
    </httpErrors>

アドレスバーのURLは同じままで、カスタム404ページ(/404.aspx)ページが表示されますが、httpステータスコード200が返されます。

ただし、次のURLが入力されている場合:

www.mysitefinitywebsite.com/test.aspx-ASPXエラーハンドラーは次の構成で起動します。

<customErrors mode="On" >
    <error redirect="~/Sitefinity/nopermissions.aspx" statusCode="403" />
    <error redirect="~/404.aspx" statusCode="404" />
</customErrors>

ここでも、カスタム404ページが表示されますが、アドレスバーのURLは次のように変更されます。

www.mysitefinitywebsite.com/404.aspx?aspxerrorpath=/test.aspx

そして奇妙なことに、Firebugをチェックすると、text.aspxに対して302コードが返され、次に/404.aspx?aspxerrorpath=/test.aspxに対してステータス200が返されます。

ここで何が起こっているのか完全には理解していません。IISがステータスコードでまったく応答していないようです。これは仕様によるものですか?完全にクレイジーなようです!

設計によるものである場合、おそらくそれを解決する唯一の方法は、プログラムで正しい応答コードを返すことですか?

よろしくお願いしますhiggsy

4

1 に答える 1

0

<httpErrors>要素を使用してを使用するとexecuteUrl、動的コンテンツが提供されます。そのコンテンツがステータスコード(asp.net、aspなどのページ)を明示的に返さない場合は、適切と思われる existingResponse属性をauto / replace/passthroughに設定する必要があります。

ここでの目的は、Webサーバーで一般的なエラーが発生する可能性があるため、別のエラーコードまたは拡張エラーコードをクライアントに返すことをお勧めします。これは、404に見つからなかったものなどに関する詳細情報を含めたり返したりする必要があるAPIにとってより意味があります。

既存の応答フラグのhttpErrorsに関するIIS.NETのドキュメントを参照してください

http://www.iis.net/ConfigReference/system.webServer/httpErrors


ASP.NETの場合、エラー時の302リダイレクトがデフォルトの動作であり、これが表示されます。404は、リダイレクト先のページがプログラムで応答のステータスコードを設定しているときに返されます。

違いは単に取り扱いによって引き起こされています。最初に、ASP.NETパイプを実行する前にIISがエラーを処理できるようにします。2つ目は、IISがASP.NETパイプラインに渡されます。それらは2つの異なる技術であるため、2つの異なる動作です。少し調べれば、両方に同じことをさせることができますので、ご安心ください。

于 2011-03-05T18:51:56.757 に答える