2009-06-08 10 views
0

Ich habe eine ASP.NET-Seite zu behandeln "404 Seite nicht gefunden" es ist Setup durch Konfigurieren der <customErrors> Abschnitt in meiner Datei web.config und Festlegen der benutzerdefinierten Fehlerseite für 404 Fehler im IIS-Manager.Wie rebasen Sie Hyperlinks und Inhalte in einer ASP.NET-Seite?

Es funktioniert wie erwartet für Seiten im Stamm meiner Website, funktioniert aber nicht in einem Unterverzeichnis der Website - die Hyperlinks und Inhalte in meiner benutzerdefinierten Fehlerseite haben die falsche URL-Basis.

Alle Links in meiner Fehlerseite sind serverseitige Kontrollen (runat = "server") und ihre Links basieren auf "~ /".

Wenn ich sehen Sie die Seite mit http://mysite/nosuchfolder/nosuchfile die Seite mit Links macht denken, es von der Wurzel serviert wird, sondern von nosuchfolder und als solche alle Links werden im Browser als Browser gebrochen Links von nosuchfolder stützen.

Gibt es eine Möglichkeit, der ASP.NET-Seite mitzuteilen, Links in einem anderen Ordner/Dateinamen neu zu erstellen?

Hinweise:

  • Die Mehrheit der Seitenvorlage von einer Master-Seite gerendert wird
  • Ich bin mit IIS6 und haben individuelle Fehler 404 URL gesetzt: /error404.aspx
  • In meinem web.config Datei ich den <customErrors> Abschnitt konfiguriert habe umleiten zu /error404.aspx
  • Als Abhilfe, die ich den HTML-<base>-Tag in der Seite verwenden, aber ich möchte diesen
  • vermeiden
  • Ich will nicht alle meine „~ /“ nach Links ändern müssen „/“ oder ein Inline-Hack stützen

Antwort

0

Scott Gu Artikel über URL auf dem richtigen Weg (sozusagen!) Hat mich Umschreiben - danke für den Tipp James.

Die Antwort ist Context.RewritePath(newPath)

Hier verwenden Sie den Code, die ich in meiner benutzerdefinierten 404-Seite verwenden -

protected override void Render(HtmlTextWriter writer) 
{ 
    string rebase = Server.UrlDecode(Request.ServerVariables["QUERY_STRING"]); 

    if (rebase.Length>10 && rebase.StartsWith("404;")) 
    { 
     try 
     { 
      rebase = new Uri(rebase.Substring(4)).AbsolutePath; 
     } 
     catch 
     { 
      rebase = "/"; 
     } 
     finally 
     { 
      Context.RewritePath(rebase); 
     } 
    } 

    base.Render(writer); 
    Response.StatusCode = 404; 
} 

ASPX-Seiten auf die gleiche Art und Weise zu fehlen handhaben, gibt es eine Einstellung in web.config ist genannt redirectMode dass Sie

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

Dies stoppt das Standardverhalten der Umleitung auf ResponseRewrite eingestellt Der Benutzer zu ~/error404.aspx?aspxerrorpath=badfile

Hinweis: Diese Einstellung ist neu zu den neuesten ASP.NET-Service Packs (z. Rahmen 3.5 SP1)

MSDN Reference for redirectMode

0

Wenn Sie uo yoru custome Fehlerseiten festlegen, wird es Umleitung oder URL umschreiben? Das Problem, das Sie beschreiben, ist ein häufiges Problem beim Implementieren von URL-Umschreibung in ASP.NET. Im Wesentlichen wird es beim URL-Umschreiben für den Prozessor unklar, welche URL beim Parsen von URLs zu verwenden ist. Eine Nummer, wenn Artikel/Beiträge geschrieben wurden, wie das Problem behoben werden kann.

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

http://searchengineland.com/url-rewriting-custom-error-pages-in-aspnet-20-12234

+0

Dank James, ich bin keine URL Rewriting - nur Umleitung in IIS und in meinem web.config. Ich werde diese Seiten allerdings lesen – Alex

Verwandte Themen