2011-02-21 19 views
17

IIS 7'de kurulmuş bir sitede özel 404 sayfam olarak bir .aspx sayfam var. Kullanmak için kullanıcının erişmeye çalıştığı orijinal URL'yi almam gerekir. 404 sayfasında işleniyor. İşin aslı, özellikle ASP.NET'in özel hatalar bölümünden yönlendirilmeyen bir .aspx uzantısı (ör. http://example.com/testurl) içermeyen 404'leri işlemem gerektiğidir. IIS'yi özel 404'ü işaret edecek şekilde yapılandırabilirim, ancak bu noktada orijinal URL'mi nasıl alacağımı bilmiyorum? Bunun mümkün olup olmadığını bilen var mı?IIS7'de özgün URL'ye erişme 404 yönlendirme sayfası

sayesinde

Mike

+1

Sorununuzda herhangi bir şans var mı? Gerekirse cevabımı açıklamaktan memnuniyet duyarım. – rsbarro

cevap

24

Evet, 404 hataya neden URL'yi almak mümkündür, sadece IIS düzgün yapılandırmış emin olmak gerekir.

İki nokta, işlemek gereken bir tane vardır, bir hata .aspx veya .NET tarafından işlenen başka bir sayfadan gelir ve diğeri, sorunun, bozuk bir klasörden geldiği yerdir (sorunuzdaki gibi) , http://example.com/testurl) veya .NET tarafından işlenmeyen dosya adı (örneğin, * .htm). IIS 7'de, web uygulamanızın "ASP.NET" bölümünde ".NET Hata Sayfaları" altında ve "IIS" bölümünde "Hata Sayfaları" altında özel bir 404 hatası yapılandırmanız gerekir.

<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> 

Not: web.config değişiklikler böyle bir şey görsterme redirectMode = "ResponseRewrite" Yukarıda listelenen size 404 sayfaları aslında 404 iletileri dönmek istiyorsanız önemlidir ve bunu sanmıyorum IIS ile ayarlanmalıdır.

Örneğimde, tüm 404 hatalarını işlemek için Error404.aspx adlı bir sayfa oluşturdum. Bir .NET sayfası (.aspx, vb.) Bir 404 istisnası atarsa, orijinal dosya adı aspxerrorpath querystring değişkeninde bulunabilir. Normal bir htm veya başka bir sayfa bir 404 hatasına neden olduğunda, orijinal yol Request.RawUrl özelliğinden okunabilir. bunu manuel olarak ayarlamanız gerekir böylece

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; } 
} 

Varsayılan olarak, 404 hata sayfası, 404 durum kodu döndürmez: Ben de durumun ele alınması benim Error404.aspx sayfasında aşağıdaki kodu kullanılır. Daha fazla ayrıntı için bkz. this post.

+1

Teşekkürler ... bu makalenin bir bileşimi ile birlikte kullanıldı http://www.agilewebtechnologies.com/blog/post/2007/11/18/Redirect-Using-404-Error-Handling-in-ASPNET-20-on- Paylaşılan-Hosting- (Bölüm-4) .aspx 301 yönlendirmeye dönüştürmek. Added Response.AddHeader ("Yer", OriginalUrl); Response.End(); işi yapmak için Error404'te kodunuzun sonuna. – Dave

+1

Açık ve ayrıntılı cevabınız için teşekkür ederiz. Ben microsoft web sitesinde böyle bir şey bulamadık ve 1 saatten fazla israf etti. – dvdmn

İlgili konular