2012-06-15 48 views
12

Tôi đang sử dụng mã web.config bên dưới để chuyển các yêu cầu tới trang thiếu đến một trang xử lý lỗi 404:404 chuyển hướng cho các trang aspx không

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="404.aspx"/> 
</customErrors> 

Nó hoạt động tốt khi tôi tìm kiếm các trang như "mất tích .aspx "nhưng nó không hoạt động đối với các trang không có phần mở rộng" .aspx "như" missing.asp "hoặc chỉ" thiếu ". Khi nó không hoạt động, nó chỉ tải một trang lỗi tiêu chuẩn IIS 7.5.

Tôi đang làm gì sai? Tôi đang sử dụng .net 4. Tôi nhận thấy những người khác hỏi cùng một câu hỏi nhưng họ không nhận được câu trả lời.

Cảm ơn!

+0

thử tháo 'redirectMode = "ResponseRewrite" ' – Damith

+0

tôi đã cố gắng sử dụng các thông tin trong câu hỏi này, nhưng là không thể làm cho nó đi. Bạn có thể rất tử tế để xem http://stackoverflow.com/questions/25798775/web-config-not-forwarding-to-404-error-page-on-non-aspx-pages – JGallardo

Trả lời

9

Như dbaseman tiểu bang này là do xử lý asp.net không được gọi cho các tập tin non-asp.net. Một cách dễ dàng để buộc trình xử lý asp.net hoạt động trên tất cả các yêu cầu là đặt những điều sau trong web.config của bạn.

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
</system.webServer> 

này cho IIS để chạy qua tất cả các module quản lý cho tất cả các yêu cầu như .html, .jpg, .css, .js, vv Điều này thường được tán thành vì nó chỉ giới thiệu thêm chế biến và độ trễ .

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

Một lựa chọn khác để thử (sạch hơn so với ở trên) đã được đăng như một câu trả lời ở đây: https://stackoverflow.com/a/6661699/701062

+1

Tùy chọn cuối cùng bạn đề cập đã giải quyết được vấn đề của tôi. Cảm ơn! – Osprey

+0

Tôi đã thử sử dụng những gì bạn đã viết nhưng không thể làm cho nó hoạt động. bạn có nhớ xem http://stackoverflow.com/questions/25798775/web-config-not-forwarding-to-404-error-page-on-non-aspx-pages – JGallardo

+0

Tôi yêu bạn ... vì vậy nhiều Gary S. – BossWalrus

4

Lý do là các tiện ích không phải ASPX không bao giờ đưa nó vào trình xử lý ASP.NET; những lỗi bạn thấy đến từ IIS. Có một phần riêng biệt httpErrors dưới system.webServer trong web.config mà bạn sẽ cần định cấu hình để xử lý các lỗi này. Xem here để biết thêm thông tin.

Ví dụ từ liên kết:

<configuration> 
    <system.webServer> 
     <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" > 
     <remove statusCode="500" /> 
     <error statusCode="500" 
      prefixLanguageFilePath="C:\Contoso\Content\errors" 
      path="500.htm" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 
+0

Tôi đã thêm mã bên dưới nhưng bây giờ thay vì chạy trang xử lý lỗi, nó sẽ hiển thị mã nguồn của trang (khi cố gắng tải một trang không phải là trang aspx không tồn tại). ' ' – Osprey

+2

Đây là câu trả lời tốt hơn vì nó không phụ thuộc vào việc gửi tất cả yêu cầu thông qua đường dẫn ASP.NET. @Osprey - điều này là do errorMode được đặt thành "DetailedLocalOnly" Cài đặt này cho biết, nếu yêu cầu đến từ máy lưu trữ tệp, hãy cung cấp một số thông tin chi tiết, khác, hiển thị 500 trang tôi đã xác định. Điều này rất hữu ích trong các kịch bản gỡ lỗi. Bạn có thể thay đổi cài đặt này thành "Tùy chỉnh" và cài đặt này sẽ luôn hiển thị thông báo lỗi thân thiện. – Tommy

+0

Điều này không hoạt động. Và tại sao bạn thêm vào 505 khi câu hỏi cụ thể về lỗi 404? – JGallardo

Các vấn đề liên quan