2

既存の Web サイトを IIS6 から IIS7 に移行していますが、404 エラー ページの設定で問題が発生しています。404 エラーページは次のように機能します。

  • カスタム ASP ページは、「特別な」URL の短いリスト (例: http://example.com/limited-offers ) に対して URL をチェックします。
  • URL がわかっている場合は、そのページの実際の URL にリダイレクトされます。
  • それ以外の場合、訪問者は 404 ステータス コードの静的なエラー ページにリダイレクトされます。

IIS6 ではこれは宣伝どおりに機能しましたが、IIS7 ではいくつかの点が変更されました。IIS7 は、エラーページが定義されているステータスコードを検出すると、常に構成されたエラーページを表示します。404 ステータス コードの静的なエラー ページの場合、これは IIS7 がカスタム ASP ページを再度実行することを意味します。これにより、無限のリダイレクトが発生します。

この動作は、Web.Config に設定を追加することで回避できることがわかりました。

<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>

ただし、これを追加した後、カスタム ASP ページはリダイレクトを拒否します。Fiddler で確認したところ、IIS7 は 404 ステータス コードを強制し、302 リダイレクトを上書きしているようです。

私たちの問題を解決するための別のアプローチを誰かが推奨できますか?

4

3 に答える 3

6

IIS 6 から IIS 7 に移行した同様のセットアップを正常に使用しています。私の web.config には次のセクションがあります。

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="500" subStatusCode="-1" />
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/302page.asp" responseMode="ExecuteURL" />
        <error statusCode="500" prefixLanguageFilePath="" path="/500page.asp" responseMode="ExecuteURL" />
        <error statusCode="500" subStatusCode="100" path="/500page.asp" responseMode="ExecuteURL" />
    </httpErrors>
<system.webServer>

関連するサイトで IIS マネージャーを使用してこれを構成しましたが、簡単であれば web.config ファイルを使用して構成することもできます。

301、302、または 404 のいずれにするかによって、条件付きヘッダーを追加できます。

404;

Response.Status = "404 Not Found"
Response.AddHeader "Location", pagename

302 (一時的なリダイレクト);

Response.Status="301 Object Moved"
Response.AddHeader "Location", pagename

301 (永続的なリダイレクト);

Response.Status="301 Moved Permanently"
Response.AddHeader "Location", pagename

IIS サイトのアプリケーション プールは、統合パイプライン モードを使用します。また、サイトのデバッグ セクションの設定が添付されています。

サイトのデバッグ セクションの設定

于 2011-05-16T12:48:59.790 に答える
2

先週、あるクライアントで同様のシナリオに遭遇しました。<httpErrors>解決策は、次のように構成することでした。

<httpErrors errorMode="Custom" existingResponse="Auto">

  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" 
         prefixLanguageFilePath="" 
         path="/404.asp" 
         responseMode="ExecuteURL" />

  <remove statusCode="500" subStatusCode="100" />
  <error statusCode="500" 
         subStatusCode="100" 
         prefixLanguageFilePath="" 
         path="/500-100.asp" 
         responseMode="ExecuteURL" />

</httpErrors>

これは、「フレンドリーな」URL を持ち、404 ハンドラー ページを使用して URL を解析し、製品をレンダリングしたり、製品のカテゴリを一覧表示したりする Cactushop (Classic ASP で記述) で機能します。

于 2012-10-28T23:19:14.457 に答える
1

または、IIS アドオン モジュールURLRewriteを使用して調べることもできます。これにより、SEO に適したカスタム URL を設定できます。これは、学習に時間がかかる可能性があるため、既存の問題の修正としてではなく、今後のアプリケーションを改善するために検討したいものであることに気付くかもしれません。

このツールの使用方法に関するいくつかの優れた記事、ビデオ チュートリアル、および情報があります。

于 2011-05-16T13:12:11.547 に答える