Asp.net
無法使用 URL 重寫出站規則更改 IIS 響應程式碼
我正在嘗試設置 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”。