Domanda

Ho una pagina ASP.NET per gestire "404 pagina non trovata" E 'l'installazione configurando la sezione <customErrors> nel mio file web.config e impostando la pagina di errore personalizzata per errori 404 in Gestione IIS.

Funziona come previsto per le pagine nella radice del mio sito web, ma non funziona in una sottodirectory del sito -. I collegamenti ipertestuali e il contenuto della mia pagina di errore personalizzata avere la base URL sbagliato

Tutti i link nella mia pagina di errore sono controlli lato server (runat = "server") e hanno i loro legami con la base "~ /".

Quando si naviga il sito con http://mysite/nosuchfolder/nosuchfile il rendering della pagina con i link a pensare è essere servito dalla radice, piuttosto dalla nosuchfolder e come tale tutti i link sono rotti nel browser come il browser sta basando collegamenti da nosuchfolder.

C'è un modo per 'raccontare' la pagina ASP.NET per ri-BASE link in diversi cartella / nome del file?

Note:

  • La maggior parte del modello di pagina è resa da una pagina master
  • Io corro IIS6 e ho posto errore personalizzato 404 all'URL: /error404.aspx
  • Nel mio file web.config Ho configurato la sezione <customErrors> per reindirizzare a /error404.aspx
  • Per aggirare il problema Sto usando il tag <base> HTML nella pagina, ma voglio evitare questo
  • Non voglio avere a cambiare tutti i miei "~ /" collegamenti basati su "/" o un basando in linea mod
È stato utile?

Soluzione 2

L'articolo di Scott Gu sulla riscrittura degli URL mi ha messo sulla strada giusta (si fa per dire!) -. Grazie per la punta James

La risposta è quella di utilizzare Context.RewritePath(newPath)

Ecco il codice che uso nel mio pagina 404 -

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

Per gestire pagine aspx nello stesso modo manca, c'è un ambiente in web.config chiamato redirectMode che si imposta ResponseRewrite

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

In questo modo il comportamento predefinito di reindirizzare l'utente a ~/error404.aspx?aspxerrorpath=badfile

Nota: questa impostazione è una novità per gli ultimi service pack ASP.NET (ad esempio Framework 3.5 SP1)

MSDN di riferimento per redirectMode

Altri suggerimenti

Quando si imposta pagine di errore yoru custome UO, sta utilizzando il reindirizzamento o riscrittura degli URL? Il problema che si descrive è un problema comune in sede di attuazione riscrittura degli URL in ASP.NET. In sostanza, in URL riscrittura diventa chiaro al processore che URL da utilizzare durante l'analisi URL. Un numero, se articoli / messaggi sono stati scritti su come affrontare la questione.

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top