Iis-7

IIS 7 在自定義 404 錯誤頁面上返回 HTTP 200

  • October 20, 2020

我已經成功地為 IIS7 設置了自定義靜態錯誤頁面。IIS7 目前用作 Java tomcat 應用程序的網關。問題是,當提供 404 錯誤頁面時,它會提供 HTTP 200 狀態程式碼標頭。我想要一種配置 IIS 以繼續發送 HTTP 404 的方法。錯誤頁面作為靜態頁面存在於 webroot 中。

這是我的 web.config 的主要部分:

<system.webServer>
   <rewrite>
       <rules>
           <rule name="HTTP to HTTPS Redirect" enabled="true">
               <match url="(.*)" />
               <conditions>
                   <add input="{HTTPS}" pattern="off" />
               </conditions>
               <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
           </rule>
           <rule name="Reverse Proxy" stopProcessing="true">
               <match url="(.*)" />
               <action type="Rewrite" url="http://localhost:8080/{R:1}" />
               <conditions>
                   <add input="{R:1}" pattern="error/*." negate="true" />
               </conditions>
           </rule>
       </rules>
   </rewrite>
   <httpErrors errorMode="Custom" existingResponse="Auto">
       <remove statusCode="404" subStatusCode="-1" />
       <error statusCode="404" prefixLanguageFilePath="" path="/error/404.htm" responseMode="ExecuteURL" />
   </httpErrors>
</system.webServer>

切換到使用responseMode="File"但是這個技巧將使用相對文件路徑,除非您解鎖或設置為 true system.webServer/httpErrors allowAbsolutePathsWhenDelegated

範例 web.config 摘錄:

<httpErrors>
   &lt;remove statusCode="404" subStatusCode="-1" /&gt;
   &lt;error statusCode="404" prefixLanguageFilePath="" path="error\404.htm" responseMode="File" /&gt;
&lt;/httpErrors&gt;

使用executeURL時,文件應該是動態呈現的文件(例如 .asp)。執行的文件必須包含設置響應狀態程式碼的腳本。

例子:

  1. 將您的 404.htm 更改為 404.asp
  2. 將以下程式碼保存在 404.asp 的頂部:

&lt;% response.status = "404 Page Not Found" %&gt;

引用自:https://serverfault.com/questions/401415