Asp.net

無法使用 URL 重寫出站規則更改 IIS 響應程式碼

  • August 30, 2014

我正在嘗試設置 IIS URL 重寫規則以匹配 403 響應,因為在禁用目錄瀏覽時有人試圖瀏覽到目錄。然後我想將它們重定向到我為 404 定義的常用 ASP.NET 自定義錯誤頁面。

這是我目前擁有的:

<outboundRules>
 <!-- By default, browsing a directory with no default resource will return 403 -->
 <rule name="Directory browsing location">
   <match serverVariable="RESPONSE_LOCATION" pattern="(.*)" />
   <conditions>
     <add input="{RESPONSE_STATUS}" pattern="^403" />
   </conditions>
   <action type="Rewrite" value="/Error/PageNotFound?aspxerrorpath={PATH_INFO}"/>
 </rule>
 <rule name="Directory browsing status code" patternSyntax="ExactMatch">
   <match serverVariable="RESPONSE_STATUS" pattern="403" />
   <action type="Rewrite" value="302" />
 </rule>
</outboundRules>

我的假設是它必須是出站規則,並且我需要重寫狀態程式碼並添加位置響應標頭,儘管原始 403 響應無論如何都不存在後者。

目前的行為是……什麼都沒有。不管我做了多少調整,我仍然看到 403。有什麼想法嗎?

順便說一句,不,網站上沒有任何合法的 403 會因此而被吞噬。我還可以為可能導致滿足條件的每條路徑創建入站規則,但這不是非常可擴展的。

URL Rewrite 幾乎可以處理所有內容,但不是 HTTP 狀態程式碼,因為它位於響應標頭之外。所以不幸的是,URL Rewrite 對此無能為力,或者至少我無法找到。我多次想做類似的事情。請注意,您可以使用 {RESPONSE_STATUS} 檢查帶有條件的狀態,但不能更新它。

@RyanCEI 的回應是我推薦的。除此之外,您可以使用 subStatusCode 將錯誤範圍限定為 403.14,並且僅用於測試,請確保測試離線或將 errorMode 設置為自定義,因為預設情況下,IIS 不會顯示自定義錯誤在本地盒子上測試時的頁面。

這是一個同時執行這兩個操作的範例配置。

   <httpErrors errorMode="Custom">
       <error statusCode="403" subStatusCode="14" path="/errorpage.htm" responseMode="ExecuteURL" />
   </httpErrors>

測試後可以關閉errorMode=“Custom”。

引用自:https://stackoverflow.com/questions/25579048