2011-07-11 47 views
35

đã tạo một trang web IIS7 mới với tích hợp ứng dụng .net 4.0.IIS7 tuỳ chỉnh 404 không hiển thị

URL kết thúc bằng .aspx hiển thị tùy chỉnh 404 bất kỳ điều gì khác cung cấp trang lỗi máy chủ màu xanh "Lỗi HTTP 404.0 - Không tìm thấy Tài nguyên bạn đang tìm kiếm đã bị xóa, thay đổi tên hoặc tạm thời không khả dụng. " (vì vậy không có gì để làm với IE)

<customErrors redirectMode="ResponseRewrite" mode="On" defaultRedirect="/pages/404.aspx" /> 
</system.web> 
<system.webServer> 
    <httpErrors > 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

cũng đã cố gắng

<httpErrors existingResponse="PassThrough" /> 

nhưng điều đó chỉ dẫn đến một phản hồi trống.

Tôi chỉ tìm thấy một tham chiếu đến tính hữu ích của việc thực thi appcmd để kiểm tra xử lý lỗi http tùy chỉnh nhưng dưới đây là kết quả.

C:\Windows\System32\inetsrv>appcmd list config "http://mysite/file.notexist" -section:httpErrors 

<system.webServer> 
    <httpErrors> 
     <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="401.htm" /> 
     <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="403.htm" /> 
     <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="404.htm" /> 
     <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="405.htm" /> 
     <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="406.htm" /> 
     <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="412.htm" /> 
     <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="500.htm" /> 
     <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="501.htm" /> 
     <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custer 
r" path="502.htm" /> 
    </httpErrors> 
</system.webServer> 

đó là số lẻ vì trong quản lý IIS7 các trang lỗi hiển thị

404 /pages/404.aspx Execute URL Local 

Net Lỗi Trang hiển thị gì cả, mặc dù tôi đã có một mục trong đó.

Câu hỏi 1: Tôi cần thực hiện các bước nào để có trang asp .net 4 iis7 hoàn toàn mới để có trang lỗi .net tùy chỉnh cho mọi kết quả 404?

Câu hỏi 2: tại sao trình xử lý .net hoạt động đối với các tệp .aspx và không có gì khác?

lưu ý: thiết lập 404 ở cấp máy chủ và lệnh appcmd sau đó cho thấy 404 tuỳ chỉnh trong đường dẫn, nhưng đã có sự khác biệt với các trang web không cho thấy 404.

Vì vậy, tôi đoán đó là một cá trích đỏ.

Trả lời

103

câu trả lời là sử dụng

<httpErrors existingResponse="Replace" errorMode="Custom"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx?he" responseMode="ExecuteURL" /> 
    </httpErrors> 

và không có bất kỳ customErrors system.web

này làm việc cho cả hai .aspx và yêu cầu .aspx không.

kỳ lạ kết hợp này đã không xuất hiện trong bất kỳ bài đăng trên blog và câu trả lời stackoverflow nào tôi đã điều tra, thật may mắn là tôi đã thử nó.

+1

Cảm ơn bạn đã đăng câu trả lời này - điều này chỉ khiến tôi trông giống như tôi biết tôi đang làm gì! :) – indyDean

+5

Chúc tôi có thể upvote điều này một vài lần thêm. Cảm ơn sự giúp đỡ! ... Cũng đáng nói đến là tôi nhận thấy từ bài đăng này, là phần "đường dẫn" KHÔNG nên bắt đầu bằng "~" – Mercurybullet

+0

Cảm ơn - khi cài đặt thông qua IIS không đặt thuộc tính trên httpError thành phần. Đây là MicroSoft không thành công! Tại sao họ đặt nó vào và không ghi lại nó? – PhillyNJ

4
<httpErrors existingResponse="PassThrough" /> 

làm việc cho tôi trong IIS 7 (Windows Server 2008 R2).

Vấn đề của tôi là tôi đã có điều này trong web.config của mình, nhưng trong một <location>. Di chuyển nó vào gốc <system.webServer> sửa nó.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    ... 
    <system.webServer> 
     ... 
     <httpErrors existingResponse="PassThrough" /> 
    </system.webServer> 
</configuration> 
+1

Bạn có thể đăng toàn bộ 'web.config' để chúng ta có thể xem bạn đang nói về cái gì không? – JGallardo

+0

Ah, xin lỗi. Tôi muốn trợ giúp nhưng tôi không làm .NET nữa và không có quyền truy cập vào mã cũ của tôi. – mhenry1384

0

Đối với IIS7 trở đi, đi với chỉ httpErrors, theo cướp của câu trả lời: https://stackoverflow.com/a/6661699

Chỉ cần thêm, trừ khi bạn cần/muốn sử dụng ASP.NET để làm cho trang lỗi bạn, tôi sẽ khuyên bạn sử dụng các tệp HTML tĩnh để loại bỏ sự phụ thuộc vào ASP.NET. Chỉ cần chắc chắn bỏ qua bất kỳ dấu gạch chéo tiến đầu và sử dụng dấu gạch chéo ngược cho phần còn lại của đường dẫn, ví dụ:

<error statusCode="404" prefixLanguageFilePath="" path="pages\404.html" responseMode="File" /> 

Đặt responseMode="File" để giữ lại mã trạng thái chính xác.

+0

điều này có thể là nhận xét về câu trả lời gốc. –

+0

Trong nhận thức, có thể bạn đã đúng. Vào thời điểm đó tôi cảm thấy quan điểm của mình đủ quan trọng để đảm bảo một câu trả lời mới. –

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