Vâng, nó có thể để có được URL mà gây ra lỗi 404, bạn chỉ cần phải chắc chắn rằng bạn đã IIS cấu hình đúng.
Có hai trường hợp bạn cần xử lý, một trong đó là lỗi xuất phát từ tệp .aspx hoặc trang khác được xử lý bởi .NET và trường hợp khác là lỗi xuất phát từ thư mục xấu (như trong câu hỏi của bạn , http://example.com/testurl
) hoặc tên tệp (ví dụ: * .htm) không được xử lý bởi .NET. Trong IIS 7, bạn sẽ cần cấu hình một lỗi 404 tùy chỉnh trong ".NET Error Pages" trong phần "ASP.NET" cho ứng dụng web của bạn, và cũng trong "Error Pages" trong phần "IIS". Những thay đổi web.config kết thúc tìm kiếm một cái gì đó như thế này:
<system.web>
<!-- other system.web stuff -->
<customErrors defaultRedirect="/Error404.aspx" mode="On" redirectMode="ResponseRewrite">
<error redirect="/Error404.aspx" statusCode="404" />
</customErrors>
</system.web>
<system.webServer>
<!-- other system.webServer stuff -->
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/Error404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Lưu ý: redirectMode = "ResponseRewrite" được liệt kê ở trên là quan trọng nếu bạn muốn trang 404 của bạn để thực sự trở lại 404 thông điệp và tôi không nghĩ rằng nó có thể được thiết lập thông qua IIS.
Trong ví dụ của mình, tôi đã tạo một trang có tên Error404.aspx để xử lý tất cả các lỗi 404. Khi một trang .NET (.aspx, v.v.) ném ra một ngoại lệ 404, tên tệp gốc có thể được tìm thấy trong biến chuỗi truy vấn aspxerrorpath. Khi một htm thông thường hoặc trang khác gây ra lỗi 404, đường dẫn ban đầu có thể được đọc từ thuộc tính Request.RawUrl. Tôi sử dụng đoạn mã sau vào trang Error404.aspx tôi để xử lý cả hai trường hợp:
public partial class Error404 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OriginalUrl = Request.QueryString["aspxerrorpath"] ?? Request.RawUrl;
Server.ClearError();
Response.Status = "404 not found";
Response.StatusCode = 404;
}
public string OriginalUrl { get; private set; }
}
Theo mặc định, trang lỗi 404 sẽ không trả về một mã trạng thái 404, vì vậy bạn cần phải thiết lập nó bằng tay. Xem this post để biết thêm chi tiết.
Bạn có may mắn với sự cố của mình không? Tôi rất sẵn lòng làm rõ câu trả lời của tôi nếu cần. – rsbarro